javascript-获取iframe的文档对象

我正在尝试获取iframe的文档对象,但是我搜索过的所有示例似乎都无济于事。 我的代码如下所示:

<html>
    <head>
        <script>
            function myFunc(){
                alert("I'm getting this far");
                var doc=document.getElementById("frame").document;
                alert("document is undefined: "+doc);
            }
        </script>
    </head>
    <body>
        <iframe src="http://www.google.com/ncr" id="frame" width="100%" height="100%" onload="myFync()"></iframe>
    </body>
</html>

我已经测试过可以获取iframe对象,但是.document不起作用,.contentDocument也不能工作,我想我也已经测试了其他一些选项,但是所有这些选项都返回未定义的值,即使示例应该 已经工作了,但对我却不工作。 所以我已经有了iframe对象,现在我想要的只是它的文档对象。 我已经在Firefox和Chrome上对此进行了测试,但没有成功。

Dude Dawg asked 2020-06-29T23:38:26Z
3个解决方案
69 votes

尝试以下

var doc=document.getElementById("frame").contentDocument;

// Earlier versions of IE or IE8+ where !DOCTYPE is not specified
var doc=document.getElementById("frame").contentWindow.document;

注意:AndyE指出所有主要浏览器都支持contentWindow,因此这可能是最好的方法。

  • [HTTP://help.dot toro.com/李嘉诚提供了契机.PHP]

注意2:在此示例中,您将无法通过任何方式访问文档。 原因是您无法访问来源不同的iframe文档,因为它违反了“相同来源”安全政策

  • [HTTP://JavaScript.info/tutorial/same-origin-security-policy]
JaredPar answered 2020-06-29T23:38:58Z
6 votes

这是我使用的代码:

var ifrm = document.getElementById('myFrame');
ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
ifrm.document.open();
ifrm.document.write('Hello World!');
ifrm.document.close();

contentWindow与contentDocument

  • IE(Win)和Mozilla(1.7)将使用IFrame.contentWindow在iframe中返回窗口对象。
  • Safari(1.2.4)无法识别该属性,但确实具有 oIframe.contentDocument,指向内部的文档对象 iframe。
  • 更复杂的是,Opera 7使用 oIframe.contentDocument,但它指向 iframe。 因为Safari无法直接访问窗口对象 通过标准DOM的iframe元素(还是它?) 现代跨浏览器兼容的代码将只能访问 iframe中的文档。
James Hill answered 2020-06-29T23:39:36Z
6 votes

为了更强大:

function getIframeWindow(iframe_object) {
  var doc;

  if (iframe_object.contentWindow) {
    return iframe_object.contentWindow;
  }

  if (iframe_object.window) {
    return iframe_object.window;
  } 

  if (!doc && iframe_object.contentDocument) {
    doc = iframe_object.contentDocument;
  } 

  if (!doc && iframe_object.document) {
    doc = iframe_object.document;
  }

  if (doc && doc.defaultView) {
   return doc.defaultView;
  }

  if (doc && doc.parentWindow) {
    return doc.parentWindow;
  }

  return undefined;
}

...
var el = document.getElementById('targetFrame');

var frame_win = getIframeWindow(el);

if (frame_win) {
  frame_win.targetFunction();
  ...
}
...
Dominique Fortin answered 2020-06-29T23:40:00Z
translate from https://stackoverflow.com:/questions/7570496/getting-the-document-object-of-an-iframe