2014-11-01 84 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

相关问题