getElementById.contentDocument erreur dans IE
-
16-09-2019 - |
Question
<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>
Après avoir cliqué, Firefox retourne [objet HTMLDocument]. Internet Explorer undefined.
Comment puis-je sélectionner l'élément iView avec Internet Explorer? Merci.
La solution
De cette page :
Mozilla prend en charge la norme W3C d'accéder à l'objet document de iframe par IFrameElm.contentDocument, tandis qu'Internet Explorer vous oblige à y accéder via document.frames [ « nom »], puis accéder au document résultant.
Vous devez détecter le navigateur et IE faire quelque chose comme ceci:
document.frames['iView'].document;
Autres conseils
L'équivalent cross-navigateur pour contentDocument
(y compris Firefox lui-même, où contentDocument
fait travail) est contentWindow.document
.
Donc, essayez:
alert(document.getElementById('iView').contentWindow.document);
contentWindow
vous obtient une référence à l'objet window
du iframe, et bien sûr .document
est juste l'objet du document DOM pour l'iframe.
Vous semblez vouloir obtenir le contenu du droit iframe?
IE7 et FF2:
var iframe = document.getElementById('iView');
alert(iframe.contentWindow.document.body.innerHTML);
Utilisation détection de caractéristiques, comme contentDocument
est supporté dans 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
}
contentWindow.document.body.innerHTML
travaille pour moi dans Internet Explorer et Firefox, alors que
contentDocument.body.innerHTML
ne fonctionne que dans Firefox.
Faites quelque chose comme ceci:
var myFrame = document.getElementById('iView');
var frameDoc = myFrame.contentDocument || myFrame.contentWindow;
if (frameDoc.document){
frameDoc = frameDoc.document;
}
alert(frameDoc);
Voir cette page pour plus de détails