親しみやすい iframe (同じドメイン) を作成し、 JavaScript で DOM に追加しました。マイページに表示されます。HTML の検査は次のようになります。
<iframe id="test_frame" frameSpacing="0" height="100" src="javascript:window['contents']" width="100" name="test_frame">
<!DOCTYPE html>
<html>
<head>
<title>test_frame</title>
<base target=_top>
</head>
<body style="margin: 0px; padding: 0px">
<p>Hello World</p>
</body>
</html>
</iframe>
次に、iframe のマークアップにアクセスするために次を実行します<body>
。
alert(window.frames["test_frame"].document.body.innerHTML);
これは、Internet Explorer 6-10 では失敗するためbody
ですnull
。iframeのdocument
オブジェクトは存在しますが、読み取り可能なプロパティがないようです。他のブラウザは単に文字列を表示します<p>Hello World</p>
。
しかし興味深いことに、以下は IE 6-10 および他のすべてのブラウザーで機能します。
window.setTimeout(function(){
alert(window.frames["test_frame"].document.body.innerHTML);
}, 1);
私の知る限りsetTimeout
、渡された関数はグローバル スコープで実行されます。だから私はcallを使ってみましたが、うまくいきません:
(function(){
alert(window.frames["test_frame"].document.body.innerHTML);
}).call(window);
setTimeout でコードをラップすることで IE iframe の問題が解決する、同様のケースを見てきました。IE でのこの背後にあるメカニズムまたはロジックは何ですか? 適切な回避策はありますか?
上記のテストは標準モードで実行され、記載されている以外のエラーはありませんでした。