私はonload
イベントが発火する前にロードするためにページのリソースを待っていることを知っている - 画像、スタイルシートなどbody.onloadはIFrameを待っていますか?
しかし、これはページ内のiFrameを含まれていますか?言い換えれば、すべての子フレーム 'onload
は、親の前に常に起動することが保証されていますか?
また、ブラウザによって動作が異なるかどうか教えてください。
私はonload
イベントが発火する前にロードするためにページのリソースを待っていることを知っている - 画像、スタイルシートなどbody.onloadはIFrameを待っていますか?
しかし、これはページ内のiFrameを含まれていますか?言い換えれば、すべての子フレーム 'onload
は、親の前に常に起動することが保証されていますか?
また、ブラウザによって動作が異なるかどうか教えてください。
私のページにあるように、各iframeは独立したオンロードを持ち、トップフレームのonloadはiframeが起動するのを待たずにいます。
私のサイトでは時々非常にゆっくりと読み込まれるgif/pngバナーがあるので、それらをiframeに入れて、サイト全体とonloadイベントをより速く動作させました。
いいえ、そうではありません。そのようなことをしたい場合は、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>
これは、すべてのフレームがロードされたときに警告します。
例を参照してください:
+1私はこれを行う必要があります。私の問題を解決してくれてありがとう(この答えに関しては、将来3年間に起こった)。 – msanford
あなたが提供する例は、window.loadイベントではなく、jQuery DOMreadyイベントを使用しています。あなたの例を変更すると、iframe内のすべてのコンテンツがロードされるまでwindow.loadイベントが発生しないことがわかります。詳細については、以下を参照してください。http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly/ – BarelyFitz
またはプレーン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を使ってコードを少なくして多くのことを実現できるからです。
+1 for vanilla JS。 – msanford
これは私にとってはうまくいったが、スタックオーバーフローを避けるためにcheck関数に 'setTimeout'を追加する必要があった。 – jmargolisvt
これは正しくありません。ほとんどの場合、iframe内のすべてのコンテンツの読み込みが完了するまで、onloadイベントは発生しません。詳細については、以下を参照してください。http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly/ – BarelyFitz