2013-02-19 15 views
2

我創建了一個包含空iframe的頁面。然後我可以選擇iframe文檔並導航到它的主體:在IE10上無法獲得同一起源的iframe正文?

var iframe = document.getElementsByTagName('iframe')[0]; 
var doc = iframe.contentDocument || iframe.contentWindow.document; 
var body = doc.body; 
console.log("Body is", body); 

在firefox和chrome中,這給了我身體對象。在IE10中,它給了我空。

Here is a Jsbin demonstrating the issue.打開JS,控制檯,輸出面板並點擊「使用JS運行」。

兩個問題:

  1. 我如何訪問iframe的身體在一個跨瀏覽器的方式?
  2. 哪一個是正確的「規範」行爲?
+0

您是否嘗試將代碼包裝在'window.onload'中? – 2013-02-19 21:13:08

+0

在我的實際應用程序中,頁面在運行之前很久才加載,在這個例子中它不是,但jsbin將腳本附加到底部,所以它應該沒關係。 – 2013-02-19 21:14:41

回答

0

一年多過去了,但我相信,解決方案是致電

doc.open() 
//make any modifications 
doc.close() 
//at this point doc.body will not be null 

這使得事情以相當一致的方式跨瀏覽器工作

5

今天早些時候我有類似的問題。看起來,至少9和10的IE瀏覽器並沒有正確創建iframe正文(當我使用開發工具時,我能夠在iframe中看到一個body標籤,但是像你無法調用它),何時沒有指定的src。它給你null,因爲它不存在。

答案是,是否有跨瀏覽器方式訪問iframe的正文,不是。但是,您可以使用解決方法。首先,檢查iframe主體是否存在,如果不存在,則創建它。

您的代碼應該是這樣的:

var iframe = document.getElementsByTagName('iframe')[0]; 
var doc = iframe.contentDocument || iframe.contentWindow.document; 

// The workaround 
if (doc.body == null) {  // null in IE 
    doc.write("<body></body>"); 
} 

var body = doc.body; 
console.log("Body is", body); 

來源:http://forums.asp.net/t/1686774.aspx/1

+0

這有幫助,謝謝! – 2014-04-28 15:39:22

0

此代碼爲我工作的跨瀏覽器:

var doc=ifr.contentWindow||ifr.contentDocument; 
if (doc.document) doc=doc.document; 
var body=doc.getElementByTagName("body")[0];