document.open / document.write没有正确清除chrome中的文档 - 这是chrome中的错误吗?

时间:2012-09-14 01:48:46

标签: javascript firefox google-chrome document.write

我通过document.write写入iframe,然后尝试覆盖同一iframe上的文档。在FF中,这可以正常工作。但是,在初始document.write的chrome代码中,即使我用第二个document.write覆盖它,它仍然存在。

看到这个小提琴:http://jsfiddle.net/meQcC/

如果您按照预期在FF中查看它,iframe为空,您实际上得到“函数onLoad未定义错误”,因为在行

doc.write("<html><head><script>;" +
      "<\/script></head><body onload='onLoad()'></body></html>");

显然没有定义onLoad函数。但是,如果你在chrome中查看相同的小提琴,iframe将显示一个黑色矩形,并且onLoad调用没有错误,它将调用先前定义的函数,就像它仍然存在一样!!!!

有没有办法在chrome中清除文档,以便我可以覆盖iframe的内容,而不会以某种方式持久存在旧代码?这是chrome中的错误吗?

2 个答案:

答案 0 :(得分:5)

是的,这是Chrome中的一个错误(或者更准确地说是在WebKit中)。根据规范,它应该是创建一个新的Window对象并删除所有全局事件侦听器,并且它没有这样做。

请参阅http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#dom-document-open第14步。

答案 1 :(得分:2)

删除<script>并不会取消定义它定义的任何函数。

如果你想实现这一点,你需要保留你创建的所有全局变量的列表,并使用delete window.WHATEVER;

删除它们