заменить весь html

У меня есть внешний веб-сервис, который получает всю строку html, анализирует ее содержимое и изменяет ее, прежде чем вернуть в браузер.

Теперь внутри браузера мне просто нужно заменить html-документ тем, что я получил, но это оказывается невероятным кошмаром!!!

Я пробовал всевозможные комбинации, такие как:

document.documentElement.outerHTML = responseText;

и

document.getElementsByTagName("html").item(0).innerHTML

и document.getElementsByTagName("head").item(0).outterHTML

и ничего не работает. он либо сбой с исключением COM (да, это выполняется внутри BHO, либо с каким-то другим случайным сообщением о том, что O(o)utterHTML не является допустимым свойством для цели.


person ricardoespsanto    schedule 06.09.2012    source источник


Ответы (2)


АФАИК, вы не можете. Самое близкое - заменить внутренний html.

person StuartLC    schedule 06.09.2012
comment
Но этого недостаточно! Мне тоже нужно заменить голову. И ПОЧЕМУ на земле это было бы невозможно?? - person ricardoespsanto; 06.09.2012
comment
Что же произойдет с исполняемым в данный момент javascript? Это на странице? - person StuartLC; 06.09.2012
comment
В том-то и дело... Меня не волнует текущая страница. Я просто хочу заменить его. Я делаю именно это в расширении ff, и все работает как надо. Код, который выполняет замену, не является js его управляемым кодом C #, работающим как BHO. - person ricardoespsanto; 06.09.2012
comment
Возможно, что-то вроде document.open(), напишите содержимое, а затем замените текущее местоположение документа. - person Michael Itzoe; 06.09.2012
comment
@MichaelItzoe Я не очень понял вашу идею: p Не могли бы вы показать мне, пожалуйста? - person ricardoespsanto; 06.09.2012
comment
@Ricky Я никогда этого не делал, но только что читал об этом на днях (в книге, поэтому нет ссылки; возможно, это поможет: w3schools.com/jsref/met_doc_open.asp) - person Michael Itzoe; 06.09.2012

Можете ли вы изменить веб-сервис? Если это так, вы можете использовать HTML-форму на своей стороне. Для этого вам нужно заставить ваш сервер принимать данные, закодированные либо как application/x-www-form-urlencoded, либо как multipart/form-data.

Если вы можете это сделать, вы можете просто разместить форму на своей странице с одним входом в нее. Чтобы получить новый код от веб-службы, введите строку HTML в значение input и отправьте форму. Браузер автоматически отобразит возвращенную HTML-страницу.

Если вы не можете/не хотите менять сервис, то я согласен с nonnb: я не думаю, что можно заменить весь HTML. Но вы можете заменить innerHTML тела и головы вручную. Разделите части тела и головы из возвращаемой строки и замените их. Это в основном то же самое, что и замена всего документа, но вам нужно вручную применить атрибуты к body/head/html-тегам, если это необходимо.

person Wutz    schedule 06.09.2012
comment
Веб-служба и BHO должны выполнять модификации контента для всех страниц, которые пользователь может просматривать, а не только для одной. - person ricardoespsanto; 06.09.2012