getElementById.contentDocument error in IE

匿名 (未验证) 提交于 2019-12-03 02:12:02

问题:

<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



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