<iframe>los elementos tienen un loadevento para eso.
La forma en que escuche ese evento depende de usted, pero generalmente la mejor manera es:
1) crea tu iframe programáticamente
Se asegura de que loadsiempre se llame a su oyente al adjuntarlo antes de que el iframe comience a cargarse.
<script>var iframe = document.createElement('iframe');
iframe.onload =function(){ alert('myframe is loaded');};// before setting 'src'
iframe.src ='...';
document.body.appendChild(iframe);// add it to wherever you need it in the document</script>
2) JavaScript en línea , es otra forma que puede usar dentro de su marcado HTML.
<script>function onMyFrameLoad(){
alert('myframe is loaded');};</script><iframe id="myframe" src="..." onload="onMyFrameLoad(this)"></iframe>
3) También puede adjuntar el detector de eventos después del elemento , dentro de una <script>etiqueta, pero tenga en cuenta que en este caso, existe una pequeña posibilidad de que el iframe ya esté cargado cuando llegue el momento de agregar su detector. Por lo tanto, es posible que no se llame (p. Ej., Si el iframe es muy rápido o proviene de la memoria caché).
<iframe id="myframe" src="..."></iframe><script>
document.getElementById('myframe').onload =function(){
alert('myframe is loaded');};</script>
¡Gracias, esto hace exactamente lo que necesitaba!
Jaime Garcia
1
Con este método, solo puede ejecutar una única función cuando se carga el iframe. Vea mi respuesta a continuación usando addEventListenerque permite que se ejecuten múltiples devoluciones de llamada en el evento de carga.
Iest
1
Este enfoque también es vulnerable a una condición de carrera, ya que el iframe podría cargarse antes de que se ejecute la etiqueta del script.
Iest
77
El evento de carga no funciona cuando intenta descargar un archivo.
Ninguna de las respuestas anteriores funcionó para mí, sin embargo, esto sí
ACTUALIZACIÓN :
Como @doppleganger señaló a continuación, la carga ha desaparecido a partir de jQuery 3.0, así que aquí hay una versión actualizada que utiliza on. Tenga en cuenta que esto realmente funcionará en jQuery 1.7+, por lo que puede implementarlo de esta manera incluso si aún no está en jQuery 3.0.
¿Es preocupante que mi depurador se detenga en mi punto de interrupción handleLoad()antes de ver el renderizado de iFrame? Espero que sea solo un problema de representación en lugar de un problema de carga de contenido.
Sridhar Sarnobat
qué tal capturar ese evento mediante jquery cuando el iframe ya está allí ... es decir: jquery no crea el iframe.
Gumuruh
3
Tenga en cuenta que el evento de carga no parece activarse si el iframe se carga cuando está fuera de la pantalla. Esto ocurre frecuentemente cuando se usan las pestañas "Abrir en una nueva ventana" / w.
No creo que ese código haga lo que tú crees que hace. Puede reemplazar ese selector "#iFrame" en su violín con cualquier cosa y la alerta aún se dispara
roryok
66
Además de @roryok, ready se dispara cuando DOM está listo, no se carga toda la página.
Ivan Nikitin
1
ready se dispara cuando el DOM está listo y se puede ejecutar js, no cuando se carga el contenido.
Sergey Gussak
2
$ ("# iframeid"). ready activa la función cuando el elemento está en el dom. No cuando el ifram ha terminado de cargarse.
Respuestas:
<iframe>
los elementos tienen unload
evento para eso.La forma en que escuche ese evento depende de usted, pero generalmente la mejor manera es:
1) crea tu iframe programáticamente
Se asegura de que
load
siempre se llame a su oyente al adjuntarlo antes de que el iframe comience a cargarse.2) JavaScript en línea , es otra forma que puede usar dentro de su marcado HTML.
3) También puede adjuntar el detector de eventos después del elemento , dentro de una
<script>
etiqueta, pero tenga en cuenta que en este caso, existe una pequeña posibilidad de que el iframe ya esté cargado cuando llegue el momento de agregar su detector. Por lo tanto, es posible que no se llame (p. Ej., Si el iframe es muy rápido o proviene de la memoria caché).También vea mi otra respuesta sobre qué elementos también pueden activar este tipo de
load
eventofuente
addEventListener
que permite que se ejecuten múltiples devoluciones de llamada en el evento de carga.Ninguna de las respuestas anteriores funcionó para mí, sin embargo, esto sí
ACTUALIZACIÓN :
Como @doppleganger señaló a continuación, la carga ha desaparecido a partir de jQuery 3.0, así que aquí hay una versión actualizada que utiliza
on
. Tenga en cuenta que esto realmente funcionará en jQuery 1.7+, por lo que puede implementarlo de esta manera incluso si aún no está en jQuery 3.0.fuente
load
se ha ido. Por favor, use.on('load', function() { ... })
en su lugar.jquery
ojqLite
este es el camino a seguir!Hay otra forma consistente ( solo para IE9 + ) en JavaScript vainilla para esto:
Y si estás interesado en Observables, este es el truco:
fuente
handleLoad()
antes de ver el renderizado de iFrame? Espero que sea solo un problema de representación en lugar de un problema de carga de contenido.Tenga en cuenta que el evento de carga no parece activarse si el iframe se carga cuando está fuera de la pantalla. Esto ocurre frecuentemente cuando se usan las pestañas "Abrir en una nueva ventana" / w.
fuente
También puede capturar el evento jquery ready de esta manera:
Aquí hay un ejemplo de trabajo:
http://jsfiddle.net/ZrFzF/
fuente