javascript - contentwindow - iframe video
Obtener el documento objeto de un iframe (3)
Este es el código que uso:
var ifrm = document.getElementById(''myFrame'');
ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
ifrm.document.open();
ifrm.document.write(''Hello World!'');
ifrm.document.close();
contentWindow vs. contentDocument
- IE (Win) y Mozilla (1.7) devolverán el objeto de ventana dentro del iframe con oIFrame.contentWindow.
- Safari (1.2.4) no comprende esa propiedad, pero tiene oIframe.contentDocument, que apunta al objeto del documento dentro del iframe.
- Para hacerlo aún más complicado, Opera 7 usa oIframe.contentDocument, pero apunta a la ventana objeto del iframe. Debido a que Safari no tiene forma de acceder directamente al objeto ventana de un elemento iframe a través del DOM estándar (¿o no?), Nuestro código completamente moderno compatible con varios navegadores solo podrá acceder al documento dentro del iframe.
Estoy tratando de hacer que el documento sea objeto de un iframe, pero ninguno de los ejemplos que he buscado en google parece ayudar. Mi código se ve así:
<html>
<head>
<script>
function myFunc(){
alert("I''m getting this far");
var doc=document.getElementById("frame").document;
alert("document is undefined: "+doc);
}
</script>
</head>
<body>
<iframe src="http://www.google.com/ncr" id="frame" width="100%" height="100%" onload="myFync()"></iframe>
</body>
</html>
He probado que puedo obtener el objeto iframe, pero .document no funciona, tampoco lo hace .contentDocument y creo que también he probado otras opciones, pero todas devuelven indefinido, incluso los ejemplos que se suponen han funcionado, pero no funcionan para mí. Entonces ya tengo el objeto iframe, ahora todo lo que quiero es su documento objeto. He probado esto en Firefox y Chrome en vano.
Para aún más robustez:
function getIframeWindow(iframe_object) {
var doc;
if (iframe_object.contentWindow) {
return iframe_object.contentWindow;
}
if (iframe_object.window) {
return iframe_object.window;
}
if (!doc && iframe_object.contentDocument) {
doc = iframe_object.contentDocument;
}
if (!doc && iframe_object.document) {
doc = iframe_object.document;
}
if (doc && doc.defaultView) {
return doc.defaultView;
}
if (doc && doc.parentWindow) {
return doc.parentWindow;
}
return undefined;
}
y
...
var el = document.getElementById(''targetFrame'');
getIframeWindow(el).targetFunction();
...
Pruebe lo siguiente
var doc=document.getElementById("frame").contentDocument;
// Earlier versions of IE or IE8+ where !DOCTYPE is not specified
var doc=document.getElementById("frame").contentWindow.document;
Nota: AndyE señaló que contentWindow
es compatible con todos los principales navegadores, por lo que esta puede ser la mejor manera de hacerlo.
Nota 2: en esta muestra no podrá acceder al documento por ningún medio. La razón es que no puede acceder al documento de un iframe con un origen diferente porque viola la política de seguridad "Mismo origen"