var iframe = document.getElementById('iframeId');var innerDoc =(iframe.contentDocument)? iframe.contentDocument : iframe.contentWindow.document;
Podrías más simplemente escribir:
var iframe = document.getElementById('iframeId');var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
y se devolverá el primer documento interno válido.
Una vez que obtenga el documento interno, puede acceder a sus componentes internos de la misma manera que accedería a cualquier elemento en su página actual. ( innerDoc.getElementById... etc.)
IMPORTANTE: Asegúrese de que el iframe esté en el mismo dominio, de lo contrario no podrá acceder a sus componentes internos. Eso sería una secuencia de comandos entre sitios.
Gran respuesta. ¿Sabía que puede hacer: var innerDoc = iframe.contentDocument || iframe.contentWindow.document; // más legible y significa lo mismo
David Snabel-Caunt
55
He visto personas confundidas por eso más que operadores ternarios. Parecen no saber que se devuelve el primero válido.
geowa4
55
de hecho, como he editado la respuesta a incluirlo, el tipo por encima de mi hombro me preguntó lo que hizo ...
geowa4
12
Probablemente sea mejor educar que usar código más complejo para simplificar :)
David Snabel-Caunt
1
@JellicleCat: Cualquier forma de hacerlo es una forma de "falsificación de solicitud en sitios cruzados", también conocido como "ataque con un solo clic" o "sesión"
CSharper
12
No olvide acceder al iframe después de cargarlo . Manera antigua pero confiable sin jQuery:
Eso es llamar a una función desde un iFrame, no obtener una referencia al elemento.
Nick Mitchell
3
Las respuestas anteriores dieron buenas soluciones usando Javscript. Aquí hay una solución simple de jQuery:
$('#iframeId').contents().find('div')
El truco aquí es el .contents()método de jQuery , a diferencia del .children()que solo puede obtener elementos HTML, .contents()puede obtener tanto nodos de texto como elementos HTML. Es por eso que uno puede obtener el contenido del documento de un iframe al usarlo.
Más información sobre jQuery .contents(): .contents ()
Tenga en cuenta que el iframe y la página deben estar en el mismo dominio.
Si el iframe no está en el mismo dominio, de modo que no puede obtener acceso a sus componentes internos desde el padre pero puede modificar el código fuente del iframe, entonces puede modificar la página mostrada por el iframe para enviar mensajes a la ventana principal, lo que permite compartir información entre las páginas. Algunas fuentes:
No olvide acceder al iframe después de cargarlo . Manera antigua pero confiable sin jQuery:
fuente
CallYourFunction()
es función dentro de la página y esa acción de función en ellafuente
Las respuestas anteriores dieron buenas soluciones usando Javscript. Aquí hay una solución simple de jQuery:
El truco aquí es el
.contents()
método de jQuery , a diferencia del.children()
que solo puede obtener elementos HTML,.contents()
puede obtener tanto nodos de texto como elementos HTML. Es por eso que uno puede obtener el contenido del documento de un iframe al usarlo.Más información sobre jQuery
.contents()
: .contents ()Tenga en cuenta que el iframe y la página deben estar en el mismo dominio.
fuente
Ninguna de las otras respuestas me funcionó. Terminé creando una función dentro de mi iframe que devuelve el objeto que estaba buscando:
Luego llama a esa función así para recuperar el elemento:
fuente
Si el iframe no está en el mismo dominio, de modo que no puede obtener acceso a sus componentes internos desde el padre pero puede modificar el código fuente del iframe, entonces puede modificar la página mostrada por el iframe para enviar mensajes a la ventana principal, lo que permite compartir información entre las páginas. Algunas fuentes:
fuente
El siguiente código lo ayudará a encontrar datos de iframe.
fuente