最多投票の回答を拡張するには:いつ、どのように DOM に接続するかを制御できない場合(たとえば、フレームワークを使用している場合 (Angular アプリでこれが発生しました))、次のことが必要になる場合があります。以下の解決策を試してください。
クロスブラウザー テストを行ったところ、次の回避策が見つかりました。コールバックに渡されたパラメーターを確認し、イベント リスナーで検査します。onload
evt.target.src
iframe.onload = function(evt) {
if (evt.target.src != '') {
// do stuff
}
}
(HTML からグローバル メソッドを呼び出す場合event
は、HTML マークアップを渡すことを忘れないでください: <iframe onload="window.globalOnLoad(event)">
)
evt.target.src
私のテストから、''
最初の呼び出しで webkit でのみ (空の文字列)にすることができます。onload
さまざまな状況での iframe のオンロード動作の研究
iframe.onload = function(evt){
console.log("frameOnload", ++i);
console.log("src = '" + evt.target.src + "'");
};
通常の URL での iframe のオンロード動作
// Chrome: onload 1 src='', onload 2 src=requestedSrc
// IE11: onload 1 src=requestedSrc
// Firefox: onload 1 src=requestedSrc
document.body.appendChild(iframe);
iframe.src = "http://www.example.org/";
404 URL での iframe オンロード動作
// Chrome: onload 1 src='', onload 2 src=requestedSrc
// IE11: onload 1 src=requestedSrc
// Firefox: onload 1 src=requestedSrc
document.body.appendChild(iframe);
iframe.src = "http://www.example.org/404";
(DNS レベルで) 解決できない URL での iframe オンロード動作
// Chrome: onload 1 src='', onload 2 src=requestedSrc
// IE11: onload 1 src=requestedSrc
// Firefox: onload NEVER triggered!
document.body.appendChild(iframe);
iframe.src= 'http://aaaaaaaaaaaaaaaaaaaaaa.example/';
DOM に追加する前にiframe.src
明示的に設定されたiframe のオンロード動作about:blank
// Chrome: onload 1 src='about:blank', onload 2 src=requestedSrc
// IE11: onload 1 src=requestedSrc
// Firefox: onload 1 src=requestedSrc
iframe.src = "about:blank";
document.body.appendChild(iframe);
iframe.src = "http://www.example.org/";
iframe.src
DOM に追加する前に明示的に JavaScript 式に設定されたiframe のオンロード動作
// Chrome: onload 1 src='javascript:void 0', onload 2 src=requestedSrc
// IE11: onload 1 src=requestedSrc
// Firefox: onload 1 src=requestedSrc
iframe.src = "javascript:void 0";
document.body.appendChild(iframe);
iframe.src = "http://www.example.org/";