getElementById.contentDocument de error en el IE
-
16-09-2019 - |
Pregunta
<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>
Después de clic, Firefox vuelve [HTMLDocument objeto]. Internet Explorer vuelve indefinido.
¿Cómo puedo seleccionar el elemento iView con Internet Explorer? Gracias.
Solución
Mozilla compatible con el estándar W3C de acceso a objeto de documento de marco flotante a través IFrameElm.contentDocument, mientras que Internet Explorer se requiere para acceder a ella a través document.frames [ "nombre"] y luego acceder al documento resultante.
Así que hay que detectar el navegador y el IE hacer algo como esto en su lugar:
document.frames['iView'].document;
Otros consejos
El cross-browser equivalente a contentDocument
(incluido el propio Firefox, donde contentDocument
hace de trabajo) es contentWindow.document
.
Así que trate de:
alert(document.getElementById('iView').contentWindow.document);
contentWindow
se obtiene una referencia al objeto window
del marco flotante, y por supuesto .document
es sólo el objeto DOM de documentos para el iframe.
Parece que desee obtener el contenido del derecho iframe?
IE7 y FF2:
var iframe = document.getElementById('iView');
alert(iframe.contentWindow.document.body.innerHTML);
detección Uso característica, como contentDocument
se admite en 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
está trabajando para mí en Internet Explorer y Firefox, mientras que
contentDocument.body.innerHTML
sólo funcionará en Firefox.
Hacer algo como esto:
var myFrame = document.getElementById('iView');
var frameDoc = myFrame.contentDocument || myFrame.contentWindow;
if (frameDoc.document){
frameDoc = frameDoc.document;
}
alert(frameDoc);
esta página para más detalles