2009-06-05 20 views
8

sé que onload evento espera a que los recursos página se cargue antes de la cocción - imágenes, hojas de estilo, etc.¿body.onload espera por IFrames?

Pero ¿Esto incluye IFrames dentro de la página? En otras palabras, ¿se garantiza que todos los cuadros secundarios 'onload s siempre se activarán antes que los de los padres?

También, avíseme si el comportamiento varía entre los navegadores.

Respuesta

3

Como veo en mis páginas, cada iframe tiene carga independiente, y onload de cuadro superior no espera a que se disparen los iframes.

Obtuve pancartas gif/png en mi sitio que a veces se cargan muy lentamente, así que las puse en el iframe y eso hizo que todo el sitio y el evento de carga funcionaran más rápido.

+4

Esto no es correcto. En la mayoría de los casos, el evento de carga no se disparará hasta que todo el contenido en iframes haya terminado de cargarse. Consulte lo siguiente para obtener más información: http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly/ – BarelyFitz

7

No, no es así. Si desea hacer algo como eso, deberá agregar un controlador de carga para el iframe. Puede hacerlo bien con jQuery:

<iframe src="http://digg.com"></iframe> 
    <script> 
    var count = $('iframe').length; 
    $(function() { 
     // alert('loaded'); // will show you when the regular body loads 
     $('iframe').load(function() { 
     count--; 
     if (count == 0) 
      alert('all frames loaded'); 
     }); 
    }); 
    </script> 

Esto alertaría cuando se carguen todos los marcos.

Véase el ejemplo:

http://jsbin.com/azilo

+1

+1 Tengo que hacer esto. Gracias por resolver mi problema (que surgió 3 años en el futuro con respecto a esta respuesta;). – msanford

+1

El ejemplo que proporciona está utilizando el evento jQuery DOMready y no el evento window.load. Si modifica su ejemplo, verá que el evento window.load no se activa hasta que se haya cargado todo el contenido del iframe. Consulte lo siguiente para obtener más información: http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly/ – BarelyFitz

5

o simple javascript debería funcionar ..

function checkIframes() { 
    if(!i) { i = 0; } 
    if(document.getElementsByTagName('iframe')[i]) { 
     document.getElementsByTagName('iframe')[i].onload = function() { i++; checkIframes(); } 
    } 
    else { yourFunctionInHere(); } 
} 

en realidad no han probado esto, pero debería funcionar ... que se refieren a ella con document.onload = function() { checkIframes(); }

Realmente no me gustan las bibliotecas como jQuery, porque hasta el momento descubrí que puedo lograr más con menos código, con javascript regular.

+0

+1 para vanilla JS. – msanford

+0

Esto funcionó para mí, pero necesitaba agregar un 'setTimeout' en la función de verificación para evitar el desbordamiento de la pila. – jmargolisvt