Javascript 为什么我不能在iframe中获取外部节点?

Javascript 为什么我不能在iframe中获取外部节点?,javascript,html,dom,Javascript,Html,Dom,我有这段代码。我可以看到iframe内容,但似乎edp0总是未定义的。为什么? <!DOCTYPE html><html> <body> <iframe src="DOM-copyB.html"></iframe> <script> ed = document.getElementsByTagName('iframe')[0].contentDocument; edp0 = ed.getE

我有这段代码。我可以看到iframe内容,但似乎edp0总是未定义的。为什么?

<!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>

我对javascript不太确定。但使用jQuery会容易得多:

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

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

您的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.
如果您从服务器上运行它们,该错误应该会消失。有关此问题的更多详细信息,请参见此问题:

谢谢您的回答。嗯,我没有使用jQuery。没有Javascript修复程序吗?这些文件是如何提供的?我只是使用Chrome在我的计算机上运行它们。它们不在服务器中。这有关系吗?如果像这样引用文件,DOM-copyB.html应该在同一个目录中。DOM-copyB.html中的内容是否显示在您的IFrame中?是的,它们位于同一目录中。我可以看到内容在iframe中。