2014-11-01 44 views
0

我有這段代碼。我可以看到iframe內容,但似乎edp0總是未定義。爲什麼?爲什麼我無法獲得iframe中的外部節點?

<!DOCTYPE html><html> 
<body> 
    <iframe src="DOM-copyB.html"></iframe> 
    <script> 
     ed = document.getElementsByTagName('iframe')[0].contentDocument; 
     edp0 = ed.getElementsByTagName('p')[0]; 
     edp1 = ed.getElementsByTagName('p')[1]; 
     alert(edp0); 
    </script> 
</body></html> 

這裏是DOM-copyB.html:

<!DOCTYPE html><html><head></head> 
<body> 
    <p>A<b>B</b>C</p> 
    <p>1<b>2</b>3</p> 
</body></html> 
+0

這些文件是如何提供的? – BlinkyTop 2014-11-01 11:37:32

+0

我只是在使用Chrome的計算機上運行它們。他們不在服務器中。這很重要嗎? – 2014-11-01 11:39:11

+0

如果你像這樣引用文件,DOM-copyB.html應該在同一個目錄下。 DOM-copyB.html中的內容是否出現在IFrame中? – 2014-11-01 11:46:51

回答

0

您的JavaScript可能在iframe的內容加載之前運行。嘗試在運行的window.onload你的代碼,看看是否有幫助:

window.onload = function() { 
    ed = document.getElementsByTagName('iframe')[0].contentDocument; 
    edp0 = ed.getElementsByTagName('p')[0]; 
    edp1 = ed.getElementsByTagName('p')[1]; 
    alert(edp0); 
}; 

如果你不是從一個服務器上運行的代碼,不過,我懷疑你的代碼成功地引用iframe中的內容後,您會得到在Chrome控制檯這樣的錯誤,由於跨源安全:

Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match. 

如果從服務器運行它們,這個錯誤應該消失。看到這個問題的更多細節: Using iframe with local files in Chrome

0

我不知道的JavaScript。但jusing jQuery會容易得多:

<iframe src="DOM-copyB.html" id="myFrame"></iframe> 

<script> 
$("#myFrame").contents().find("p"); 
</script> 
+0

謝謝你的回答。那麼,我不使用jQuery。沒有Javascript修復? – 2014-11-01 11:36:32

相關問題