4

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

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

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

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

显然没有定义 onLoad 函数。但是,如果你在chrome中查看相同的fiddle,iframe会显示一个黑色矩形,并且onLoad调用不会出错,它会调用之前定义的函数,就好像它仍然存在一样!!!!

有什么方法可以清除 chrome 中的文档,以便我可以覆盖 iframe 的内容,而不会以某种方式保留旧代码?这是chrome中的错误吗?

4

2 回答 2

5

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

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

于 2012-09-14T07:14:19.060 回答
2

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

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

于 2012-09-14T01:54:40.683 回答