IE 中的 getElementById.contentDocument 错误

IT技术 javascript explorer getelementbyid
2021-03-14 06:02:22
<html>
   <script type="text/javascript">
      function func() {
         alert(document.getElementById('iView').contentDocument);
      }    
   </script>
   <body>
      <iframe id="iView" style="width:200px;height:200px;"></iframe>
      <a href="#" onclick="func();">click</a>
   </body>
</html>

点击后,Firefox 返回[object HTMLDocument]。Internet Explorer 返回未定义。

如何使用 Internet Explorer 选择 iView 元素?谢谢。

6个回答

相当于跨浏览器contentDocument(包括Firefox本身,contentDocument 的工作)是contentWindow.document

所以尝试:

alert(document.getElementById('iView').contentWindow.document);

contentWindow获取对 iframewindow对象的引用,当然.document只是 iframe 的 DOM Document 对象。

这是一篇总结得更好的文章

为我解决了 IE7 的问题。较新的 IE 版本似乎支持 contentDocument。
2021-05-05 06:02:22

这个页面

Mozilla 支持通过 IFrameElm.contentDocument 访问 iframe 的文档对象的 W3C 标准,而 Internet Explorer 要求您通过 document.frames["name"] 访问它,然后访问生成的文档。

因此,您需要检测浏览器并在 IE 上执行以下操作:

document.frames['iView'].document; 

你好像想要获取 iframe 的内容吧?

IE7 和 FF2:

var iframe = document.getElementById('iView');
alert(iframe.contentWindow.document.body.innerHTML);

使用contentDocumentIE 8 支持的特征检测

var iframe = document.getElementById("iView");
var iframeDocument = null;
if (iframe.contentDocument) {
    iframeDocument = iframe.contentDocument;
} else if (iframe.contentWindow) {
    // for IE 5.5, 6 and 7:
    iframeDocument = iframe.contentWindow.document;
}
if (!!iframeDocument) {
    // do things with the iframe's document object
} else {
    // this browser doesn't seem to support the iframe document object
}
contentWindow.document.body.innerHTML

在 Internet Explorer 和 Firefox 中为我工作,而

contentDocument.body.innerHTML

只会在 Firefox 中工作。