IE中的getElementById.contentDocument错误

时间:2009-09-25 14:15:09

标签: javascript explorer getelementbyid

<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返回undefined。

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

6 个答案:

答案 0 :(得分:43)

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

所以试试:

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

contentWindow为您提供对iframe的window对象的引用,当然.document只是iframe的DOM Document对象。

Here's an article that summarizes better

答案 1 :(得分:12)

来自this page

  

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

所以你需要检测浏览器并在IE上做这样的事情:

document.frames['iView'].document; 

答案 2 :(得分:3)

您似乎想要获取iframe的内容吗?

IE7和FF2:

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

答案 3 :(得分:3)

使用功能检测,因为IE 8支持contentDocument

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
}

答案 4 :(得分:2)

contentWindow.document.body.innerHTML

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

contentDocument.body.innerHTML

只适用于Firefox。

答案 5 :(得分:1)

做这样的事情:

var myFrame = document.getElementById('iView');
var frameDoc = myFrame.contentDocument || myFrame.contentWindow;

if (frameDoc.document){
  frameDoc = frameDoc.document;
}

alert(frameDoc);

有关详细信息,请参阅this page