2009-07-06 39 views

Respuesta

268
var iframe = document.getElementById('iframeId'); 
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document; 

Se podría escribir más simplemente:

var iframe = document.getElementById('iframeId'); 
var innerDoc = iframe.contentDocument || iframe.contentWindow.document; 

y se devolverá el primer documento interno válida.

Una vez que obtenga el documento interno, puede acceder a sus partes internas de la misma forma que accedería a cualquier elemento en su página actual.

IMPORTANTE (innerDoc.getElementById ... etc.): Asegúrese de que el marco flotante está en el mismo dominio, de lo contrario no se puede obtener acceso a sus componentes internos. Eso sería scripting entre sitios.

+4

Gran respuesta. ¿Sabía que puede hacer lo siguiente? Var innerDoc = iframe.contentDocument || iframe.contentWindow.document; // más legible y significa lo mismo –

+1

sí, lo sabía. – geowa4

+5

He visto personas confundidas por eso más que operadores ternarios. Parece que no saben que se devuelve el primero válido. – geowa4

4
window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value') 

CallYourFunction() es función dentro de la página y que la acción función en él

+4

Llamando a una función desde un iFrame, sin obtener una referencia al elemento. –

1

Ninguna de las otras respuestas estaban trabajando para mí. Terminé la creación de una función dentro de mi iframe que devuelve el objeto que estaba buscando:

function getElementWithinIframe() { 
    return document.getElementById('copy-sheet-form'); 
} 

A continuación, se llama a esa función como tal para recuperar el elemento:

var el = document.getElementById("iframeId").contentWindow.functionNameToCall(); 
3

No se olvide acceder a la iframe después de cargar. De manera antigua pero confiable sin jQuery:

<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe> 

<script> 
function access() { 
    var iframe = document.getElementById("iframe"); 
    var innerDoc = iframe.contentDocument || iframe.contentWindow.document; 
    console.log(innerDoc.body); 
} 
</script> 
Cuestiones relacionadas