回答:
<iframe>
要素にはそのためのload
イベントがあります。そのイベントをどのように聞くかはあなた次第ですが、一般的に最良の方法は次のとおりです。
1)プログラムでiframeを作成する
これにより、iframeの読み込みが開始される前に、load
リスナーをアタッチして常に呼び出されます。
<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は、HTMLマークアップ内で使用できるもう1つの方法です。
<script>
function onMyFrameLoad() {
alert('myframe is loaded');
};
</script>
<iframe id="myframe" src="..." onload="onMyFrameLoad(this)"></iframe>
3)タグ内の要素の後にイベントリスナーを添付することもできますが<script>
、この場合、リスナーを追加するまでにiframeがすでに読み込まれている可能性があることに注意してください。したがって、それが呼び出されない可能性があります(たとえば、iframeが非常に高速であるか、キャッシュからのものである場合)。
<iframe id="myframe" src="..."></iframe>
<script>
document.getElementById('myframe').onload = function() {
alert('myframe is loaded');
};
</script>
また、このタイプのイベントを発生させることができる要素についての私の別の回答も参照してくださいload
上記の答えはどちらもうまくいきませんでしたが、これはうまくいきました
更新:
@dopplegangerが以下で指摘するように、jQuery 3.0の時点でロードはなくなったので、を使用する更新バージョンですon
。これは実際にはjQuery 1.7以降で機能するため、まだjQuery 3.0を使用していない場合でも、この方法で実装できます。
$('iframe').on('load', function() {
// do stuff
});
load
廃止されました。.on('load', function() { ... })
代わりに使用してください。
jquery
場合jqLite
、これは行く方法です!
これのためのバニラJavaScriptには、別の一貫した方法(IE9 +のみ)があります。
const iframe = document.getElementById('iframe');
const handleLoad = () => console.log('loaded');
iframe.addEventListener('load', handleLoad, true)
そして、あなたがObservablesに興味があるなら、これはトリックをします:
return Observable.fromEventPattern(
handler => iframe.addEventListener('load', handler, true),
handler => iframe.removeEventListener('load', handler)
);
handleLoad()
iFrameレンダリングが表示される前に、デバッガーがブレークポイントで停止することは心配ですか?コンテンツの読み込みの問題ではなく、純粋にレンダリングの問題であることを願っています。
オフスクリーンのときにiframeが読み込まれると、onloadイベントは発生しないようです。これは、「新しいウィンドウで開く」/ wタブを使用するときに頻繁に発生します。
この方法でjquery readyイベントをキャプチャすることもできます:
$('#iframeid').ready(function () {
//Everything you need.
});
これが実際の例です: