<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.
-
4@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.Esteban Küber– Esteban Küber2009年09月25日 14:58:51 +00:00Commented Sep 25, 2009 at 14:58
-
meta.stackexchange.com/questions/23475/…Esteban Küber– Esteban Küber2009年09月25日 15:07:04 +00:00Commented Sep 25, 2009 at 15:07
-
1sorry, dont know that this system has 'accept' functionality, thanks :)mm.– mm.2009年09月28日 08:52:12 +00:00Commented Sep 28, 2009 at 8:52
6 Answers 6
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.
1 Comment
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;
Comments
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);
Comments
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
}
Comments
contentWindow.document.body.innerHTML
is working for me in Internet Explorer and Firefox, whereas
contentDocument.body.innerHTML
will only work in Firefox.
Comments
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