在Internet Explorer中替换document.documentElement.innerHTML

时间:2011-12-09 15:50:36

标签: javascript internet-explorer innerhtml

以下在所有其他浏览器中完美无缺(据我所知):

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 个答案:

答案 0 :(得分:1)

正如@duri和我确认的那样,documentElement<html>)对象以及少数其他某些HTML元素在Internet Explorer中是只读的(请参阅第一条评论中的链接),并且因此,无法以跨浏览器方式替换documentElement

使用Javascript从link中删除所有现有scripthead标记,然后设置body属性以匹配替换内容,然后替换{ {1}}的{​​1}},最后动态添加我自己的innerHTMLbodyscript标签作为meta的子项,几乎达到了同样的事情。

感谢@duri的解决方法提示!

答案 1 :(得分:1)

document.open("text/html", "replace");
document.write("<head></head><body>Testing</body>");
document.close();