2009-06-05 1 views
8

私はonloadイベントが発火する前にロードするためにページのリソースを待っていることを知っている - 画像、スタイルシートなどbody.onloadはIFrameを待っていますか?

しかし、これはページ内のiFrameを含まれていますか?言い換えれば、すべての子フレーム 'onloadは、親の前に常に起動することが保証されていますか?

また、ブラウザによって動作が異なるかどうか教えてください。

答えて

3

私のページにあるように、各iframeは独立したオンロードを持ち、トップフレームのonloadはiframeが起動するのを待たずにいます。

私のサイトでは時々非常にゆっくりと読み込まれるgif/pngバナーがあるので、それらをiframeに入れて、サイト全体とonloadイベントをより速く動作させました。

+4

これは正しくありません。ほとんどの場合、iframe内のすべてのコンテンツの読み込みが完了するまで、onloadイベントは発生しません。詳細については、以下を参照してください。http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly/ – BarelyFitz

7

いいえ、そうではありません。そのようなことをしたい場合は、iframeのonloadハンドラを追加する必要があります。これは、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> 

これは、すべてのフレームがロードされたときに警告します。

例を参照してください:

http://jsbin.com/azilo

+1

+1私はこれを行う必要があります。私の問題を解決してくれてありがとう(この答えに関しては、将来3年間に起こった)。 – msanford

+1

あなたが提供する例は、window.loadイベントではなく、jQuery DOMreadyイベントを使用しています。あなたの例を変更すると、iframe内のすべてのコンテンツがロードされるまでwindow.loadイベントが発生しないことがわかります。詳細については、以下を参照してください。http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly/ – BarelyFitz

5

またはプレーンjavascriptのは動作するはずです。..

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

document.onload = function() { checkIframes(); }でそれを参照してくださいよりも...本当にこれをテストしていませんが、動作するはずです

jQueryのようなライブラリはあまり好きではありません。なぜなら、これまでのところ、普通のjavascriptを使ってコードを少なくして多くのことを実現できるからです。

+0

+1 for vanilla JS。 – msanford

+0

これは私にとってはうまくいったが、スタックオーバーフローを避けるためにcheck関数に 'setTimeout'を追加する必要があった。 – jmargolisvt

関連する問題