我創建了一個friendly iframe(同一個域),並用JavaScript將它添加到DOM。它在我的頁面上可見。檢查HTML看起來像:在IE中訪問友好的iframe內容
<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中背後的機制或邏輯是什麼?有沒有適當的解決方法?
上面的測試是在標準模式下運行的,沒有發現其他錯誤。
你什麼時候調用該方法?內容可能尚未加載。 –