Me gustaría manipular el HTML dentro de un iframe usando jQuery.
Pensé que sería capaz de hacer esto estableciendo el contexto de la función jQuery para que sea el documento del iframe, algo así como:
$(function(){ //document ready
$('some selector', frames['nameOfMyIframe'].document).doStuff()
});
Sin embargo, esto no parece funcionar. Un poco de inspección me muestra que las variables frames['nameOfMyIframe']
están a undefined
menos que espere un momento a que se cargue el iframe. Sin embargo, cuando se carga el iframe, las variables no son accesibles (obtengo permission denied
errores de tipo).
¿Alguien sabe de una solución a esto?
.contentWindow.document
que.document
en eliframe
elemento. Sugeriré el cambio anterior.Respuestas:
Creo que lo que está haciendo está sujeto a la misma política de origen . Esta debería ser la razón por la que obtiene errores de tipo de permiso denegado .
fuente
Si el
<iframe>
es del mismo dominio, los elementos son fácilmente accesibles comoReferencia
fuente
same origin policy
, en cuyo caso esta respuesta no es una solución para él.Podrías usar el
.contents()
método de jQuery.fuente
Si el iframe src es de otro dominio, aún puede hacerlo. Debe leer la página externa en PHP y hacerla eco de su dominio. Me gusta esto:
iframe_page.php
Entonces algo como esto:
display_page.html
Lo anterior es un ejemplo de cómo editar una página externa a través de un iframe sin el acceso denegado, etc.
fuente
same origin policy
existe, y la propuesta de esta respuesta no es inmune a ella.Encuentro esta manera más limpia:
fuente
Utilizar
en vez de
fuente
Debe adjuntar un evento al controlador de carga de un iframe y ejecutar el js allí, para asegurarse de que el iframe haya terminado de cargarse antes de acceder a él.
Lo anterior resolverá el problema de "aún no cargado", pero con respecto a los permisos, si está cargando una página en el iframe que es de un dominio diferente, no podrá acceder a ella debido a restricciones de seguridad.
fuente
Puede usar window.postMessage para llamar a una función entre la página y su iframe (dominio cruzado o no).
Documentación
page.html
iframe.html
fuente
Prefiero usar otra variante para acceder. Desde el padre puede tener acceso a la variable en el iframe secundario.
$
también es una variable y puede recibir acceso a su llamadawindow.iframe_id.$
Por ejemplo,
window.view.$('div').hide()
- ocultar todos los divs en iframe con id 'view'Pero, no funciona en FF. Para una mejor compatibilidad deberías usar
$('#iframe_id')[0].contentWindow.$
fuente
¿Has probado el clásico, esperando a que se complete la carga con la función integrada de jQuery?
K
fuente
Creo un código de muestra. Ahora puede comprender fácilmente desde diferentes dominios que no puede acceder al contenido del iframe. El mismo dominio podemos acceder al contenido del iframe
Te comparto mi código. Ejecuta este código, verifica la consola. Imprimo la imagen src en la consola. Hay cuatro iframe, dos iframe que provienen del mismo dominio y otros dos de otro dominio (tercero). Puede ver dos imágenes src ( https://www.google.com/logos/doodles/2015/googles-new-logo -5078286822539264.3-hp2x.gif
y
https://www.google.com/logos/doodles/2015/arbor-day-2015-brazil-5154560611975168-hp2x.gif ) en la consola y también puede ver dos errores de permiso (2 Error: permiso denegado para acceder al documento de la propiedad '
... irstChild)}, contenido: función (a) {return m.nodeName (a, "iframe")? a.contentDocument ...
) que proviene de un iframe de terceros.
fuente
Terminé aquí buscando obtener el contenido de un iframe sin jquery, así que para cualquiera que esté buscando eso, es solo esto:
fuente
Esta solución funciona igual que iFrame. He creado un script PHP que puede obtener todos los contenidos del otro sitio web, y la parte más importante es que puede aplicar fácilmente su jQuery personalizado a ese contenido externo. Consulte el siguiente script que puede obtener todos los contenidos del otro sitio web y luego puede aplicar su cusom jQuery / JS también. Este contenido se puede usar en cualquier lugar, dentro de cualquier elemento o página.
fuente
Para aún más robustez:
y
fuente