2009-09-25 18 views
17
<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 del clic, Firefox devuelve [objeto HTMLDocument]. Internet Explorer devuelve indefinido.getElementById.contentDocument error en IE

¿Cómo puedo seleccionar el elemento iView con Internet Explorer? Gracias.

+4

@Mauris: él está siendo educado, y ha pedido a 10 preguntas. Él tendrá tiempo para aprender las reglas aquí. Haga esos comentarios a aquellos poeple que han hecho más de 100 preguntas y nunca han aceptado un anser o respondido una pregunta. – voyager

+0

http://meta.stackexchange.com/questions/23475/should-questions-with-no-accepted-answers-be-punished-after-awhile – voyager

+1

lo siento, no sé si este sistema tiene la funcionalidad 'accept', gracias:) –

Respuesta

10

De this page:

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 del documento. marcos ["nombre"] y luego acceder al documento resultante.

por lo que necesita para detectar el navegador y el IE hacer algo como esto en su lugar:

document.frames['iView'].document; 
3

Parece que desea obtener el contenido del iframe ¿verdad?

IE7 y FF2:

var iframe = document.getElementById('iView'); 
alert(iframe.contentWindow.document.body.innerHTML); 
42

El cross-browser equivalente a contentDocument (incluido el propio Firefox, donde contentDocumenthace trabajo) es contentWindow.document .

Así que trate de:

alert(document.getElementById('iView').contentWindow.document); 

contentWindow se obtiene una referencia al objeto de la iframe window, y por supuesto .document es sólo el objeto DOM de documentos para el iframe.

.

+1

funcionó para mí para resolver mi problema con IE7. Las nuevas versiones de IE parecen ser compatibles con contentDocument. –

3

detección de Uso característica, como contentDocument se apoya 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 
} 
2
contentWindow.document.body.innerHTML 

está trabajando para mí en Internet Explorer y Firefox, mientras que

contentDocument.body.innerHTML 

sólo funcionará en Firefox.

1

hacer algo como esto:

var myFrame = document.getElementById('iView'); 
var frameDoc = myFrame.contentDocument || myFrame.contentWindow; 

if (frameDoc.document){ 
    frameDoc = frameDoc.document; 
} 

alert(frameDoc); 

Ver this page para más detalles