getElementById.contentDocument error in IE
Asked Answered
A

6

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

Academic answered 25/9, 2009 at 14:15 Comment(3)
@Mauris: he is being polite, and has asked just 10 questions. He'll have time to learn the rules here. Make those comments to those poeple that have asked over 100 questions and have never accepted an anser, or answered a question.Lansquenet
meta.stackexchange.com/questions/23475/…Lansquenet
sorry, dont know that this system has 'accept' functionality, thanks :)Academic
F
12

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; 
Frederigo answered 25/9, 2009 at 14:21 Comment(0)
H
42

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.

Hannus answered 25/9, 2009 at 14:45 Comment(1)
worked for me to solve my problem with IE7. newer IE versions seem to support contentDocument.Abbyabbye
F
12

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; 
Frederigo answered 25/9, 2009 at 14:21 Comment(0)
D
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);
Dubuffet answered 25/9, 2009 at 14:20 Comment(0)
S
3

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
}
Shotton answered 25/9, 2009 at 14:54 Comment(0)
S
2
contentWindow.document.body.innerHTML

is working for me in Internet Explorer and Firefox, whereas

contentDocument.body.innerHTML

will only work in Firefox.

Spirketing answered 4/4, 2012 at 5:6 Comment(0)
T
1

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

Tiros answered 8/11, 2012 at 20:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.