2009-12-08 63 views
2

在以下代碼中,警報正常工作,並打印出「DIV:IFRAME」,但它會說cNs [1] .childNodes [1] .document沒有任何屬性。訪問帶有DOM的iframe

HTML:

<div id="WinContainer"> 
<div style="display: none;"><iframe id="frame1" name="frame1"></iframe></div> 
<div style="display: none;"><iframe id="frame2" name="frame2"></iframe></div> 
</div> 

的JavaScript:

var cNs = document.getElementById('WinContainer').childNodes; 
alert(cNs[1].tagName + ' : ' + cNs[1].childNodes[1].tagName); 
cNs[1].childNodes[1].document.location = 'someurl.pl'; 

,但如果我這樣做:

frame1.document.location = 'someurl.pl'; 

它工作正常。

+1

你的代碼實際上並不會提醒「DIV:IFRAME」。請參閱http://jsbin.com/owofo/edit cNs [1] .childNodes [1]爲空。 – 2009-12-08 15:46:53

+0

IE和Firefox正在索引它們不同 – user105033 2009-12-08 15:54:56

+0

@unknown:不是在問題中的標記。 'cNs [1] .childNodes [1]'在所有瀏覽器中都被禁止,因爲標籤之間沒有任何空白。 – 2009-12-08 16:00:37

回答

5

iframe DOM節點有一個名爲contentDocument的屬性,它將相當於document,但該值爲iframe

如果正在顯示的頁面位於另一個服務器上(或甚至在同一臺服務器上的不同端口上),您將遇到安全異常,試圖訪問它。

不知道這是否適用於IE。

+0

爲什麼frame1.document.location可以正常工作呢? – user105033 2009-12-08 15:41:58

+0

frame1.document.location的工作原理是因爲您正在更改框架的位置而無法從中讀取任何內容。例如,當你點擊一個按鈕時,你可以有一個大的iframe加載Facebook或Myspace,但是javascript可能無法訪問任何一個的內容,因爲它可能會竊取你的個人數據。 – 2009-12-08 15:44:55

+0

contentDocument也是null – user105033 2009-12-08 16:00:13

0

我不是那麼熟悉javascript,但它看起來像你不正確地使用cNs。它看起來好像是一個包含子節點和代碼的數組。

cNs[1].childNodes[1].document.location = 'someurl.pl'; 

正嘗試獲取不存在的子節點。試試這可能會奏效。

cNs[1].document.location = 'someurl.pl'; 
0

編輯:幀1應該是:

cNs[0].childNodes[0].document.location

記住的東西0索引。

+0

在IE中這個作品,在firefox中我的元素被索引爲1,1而不是0,0 – user105033 2009-12-08 15:55:43

+0

查看http://www.quirksmode.org/js/detect.html關於瀏覽器檢測的快速教程如果事情被索引不同。 – 2009-12-08 16:10:59

0

您也可以參考可靠contentWindow屬性來獲取該iframe的文檔對象這樣:

cNs[0].childNodes[0].contentWindow.document