4

document.write を介して iframe に書き込んでから、同じ iframe のドキュメントを上書きしようとしています。FF では、これは適切に機能します。ただし、最初の document.write の chrome コードでは、2 つ目の document.write で上書きした後も保持されます。

このフィドルを参照してください: http://jsfiddle.net/meQcC/

予想どおりFFで表示すると、iframeは空白になり、実際には「関数onLoadは定義されていません」というエラーが表示されます。

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

明らかに onLoad 関数は定義されていません。ただし、クロムで同じフィドルを表示すると、iframe に黒い四角形が表示され、onLoad 呼び出しに関するエラーは発生せず、以前に定義された関数がまだ存在するかのように呼び出されます!!!!

古いコードが何とか存続することなく iframe の内容を上書きできるように、クロムでドキュメントをクリアする方法はありますか? これはクロムのバグですか?

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 に答える