getElementById.contentDocument error in IE

人走茶凉 提交于 2019-11-26 11:25:24

问题


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

After click, Firefox returns [object HTMLDocument]. Internet Explorer returns undefined.

How can I select the iView element with Internet Explorer? Thanks.


回答1:


From this page:

Mozilla supports the W3C standard of accessing iframe's document object through IFrameElm.contentDocument, while Internet Explorer requires you to access it through document.frames["name"] and then access the resulting document.

So you need to detect the browser and on IE do something like this instead:

document.frames['iView'].document; 



回答2:


The cross-browser equivalent to contentDocument (including Firefox itself, where contentDocument does work) is contentWindow.document.

So try:

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

contentWindow gets you a reference to the iframe's window object, and of course .document is just the DOM Document object for the iframe.

Here's an article that summarizes better.




回答3:


You seem to want to get the contents of the iframe right?

IE7 and FF2:

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



回答4:


Use feature detection, as contentDocument is supported in IE 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
}



回答5:


contentWindow.document.body.innerHTML

is working for me in Internet Explorer and Firefox, whereas

contentDocument.body.innerHTML

will only work in Firefox.




回答6:


Do something like this:

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

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

alert(frameDoc);

See this page for more details



来源:https://stackoverflow.com/questions/1477547/getelementbyid-contentdocument-error-in-ie

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!