iframe
を使用して単純なHTMLページを作成しました。そのsrc
属性は、含まれているページを参照します。つまり、自己参照iframeです。
this.html
<html>
<head></head>
<body>
<iframe src="this.html"></iframe>
</body>
</html>
なぜこれが無限にループしてブラウザがクラッシュしないのですか?また、なぜIEこれでクラッシュしないのですか?
(注:これは、iframeを使用して問題を解決することのメリットとデメリットに関するチームディスカッションから生まれました。「ミラーのミラー」のようなものです。)
W3Cは1997年に、 " Implementing HTML Frames "でフレームを実装する方法を説明しました。
祖先のいずれかが使用しているURLをSRCとして割り当てようとするフレームは、SRC URLがまったくないかのように扱われます(基本的には空白のフレーム)。
キングダゴが発見し、上記のコメントで述べたように、これに対するセーフガードの実装に失敗したブラウザは、Mozillain1999でした。開発者の一人からの引用:
MSIE5はこれらの種類のページには問題がないので、これはパリティのバグ(および考えられる問題の原因)です。
私はこれをさらに掘り下げることに決めました、そして、それは2004でこれが起こったことが判明しました 再び 。ただし、今回はJavaScriptが関係しました。
これがコードで、その原因は次のとおりです。<iframe name = "productcatalog" id = "productcatalog" src = "page2.htm"> </ iframe>の直後に、次のコードを含むスクリプトが続きます。frames.productcatalog.location.replace (frames.productcatalog.location + location.hash);
...
実際の結果:親ウィンドウがiframeに再帰的に読み込まれ、クラッシュすることがあります。
期待される結果:Internet Explorerのように表示するだけです。
次に again in2008withFirefox 2(これにはJavaScriptも含まれます) 。
そして again in2009。ここで興味深いのは、このバグがまだ開いていることであり、この添付ファイル:https://bugzilla.mozilla.org/attachment.cgi?id=414035
(好奇心を抑えますか?)は引き続きクラッシュします/ Firefoxをフリーズします(テストしたばかりで、Ubuntu全体がほぼクラッシュしました)。 Chromeでは、無期限に読み込まれるだけです(おそらく、各タブが個別のプロセスに存在するためです)。
他のブラウザに関しては:
「また、なぜIEこれでクラッシュしないのですか?」質問の一部IEは私たちを失望させません...
ネストされたiFrameのsrc Firefoxにクエリ文字列として単純な反復番号を追加すると、特定の反復の深さの後で他のユーザーが停止します。 IE-そして、IEバージョン10-クラッシュするだけでこれをテストしました:)
this.php
<html>
<head></head>
<body>
<iframe src="this.php?q=<?php echo (isset($_GET['q'])?$_GET['q']:1)+1?>" />
</body>
</html>