Замена document.documentElement.innerHTML в Internet Explorer - PullRequest
4 голосов
/ 09 декабря 2011

Следующее работает безупречно (насколько я могу судить) во всех других браузерах:

document.documentElement.innerHTML = "<head></head><body>Testing</body>";

Но дроссели в IE (я тестировал IE9) с консольной ошибкой:

SCRIPT600: Invalid target element for this operation. 

... ссылка на первый символ строки кода выше.

Почему это не будет работать в IE, но будет работать во всех других браузерах?Я где-то читал, что у innerHTML есть проблемы с заменой элементов 'TBODY', но я протестировал эту строку кода после удаления всех дочерних элементов TBODY, и произошла та же ошибка.но это единственный вариант, который я оставил на очень ограниченном и упрощенном веб-сайте CMS, который мы вынуждены использовать.Я только благодарен, что CMS позволяет выполнять сценарии.

По сути, мне нужно иметь возможность полностью разбирать содержимое HTML и использовать свои собственные.Опять же, это отлично работает в других браузерах.

Другие примечания:

  • CMS использует библиотеку prototype.js (она уже загружена до того, как я запускаю этот код)
  • Doctype: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • Сценарии CMS используют prototype.js для динамического добавления двух div полных содержимого при загрузке страницы

Ответы [ 2 ]

1 голос
/ 31 декабря 2018
document.open("text/html", "replace");
document.write("<head></head><body>Testing</body>");
document.close();
1 голос
/ 13 декабря 2011

Как подтвердили и @duri, и я, объект documentElement (<html>) вместе с несколькими другими HTML-элементами доступен только для чтения в Internet Explorer (см. Ссылку в первом комментарии) и поэтому заменяет documentElement в кросс-браузерном режиме невозможно.

Использование Javascript для удаления всех существующих тегов link и script из head, а затем для установки атрибутов body в соответствии с заменойсодержимое, затем замена innerHTML body и, наконец, динамическое добавление моих собственных тегов script, meta и css в качестве дочерних элементов head, обеспечивает почти то же самое.

Спасибо @duri за подсказку!

...