次のように
スクリプト要素の onload イベントと onreadystatechange イベントの両方をサポートします;/title>
/8: ポップアップ 2
IE9/10: ポップアップ 2、1 Firefox/Safari/Chrome/Opera: ポップアップ 1
テスト結果は、IE9 がスクリプト オンロード イベントをサポートし始めたことを示しています。私たちは、js ファイルがロードされたかどうかを判断するために常に上記 2 つのイベントを使用してきました。 IE では onreadystatechange イベントが使用され、readyState の値は読み込みが完了したかどうかを判断するためにイベント ハンドラーで使用されることは以前から知っていました。他のブラウザは onload イベントを使用します。
コードをコピー
コードは次のとおりです: if(isIE){ script .onreadystatechange = function(){
if(this.readyState == 'loaded' || this.readyState == 'complete'){
callback();
}
}else{
script.onload = function(){
callback();
}
}
今のところこの書き方で問題ありません。ただし、IE9/10では以下の記述によりコールバックが2回実行される場合があります
コードをコピー
}
}
この書き方のコツは、onload と onreadystatechage の両方が同じ関数を使用することです。onreadystatechage イベントはサポートされていません。 Firefox/Safari/Chrome/Opera では、readyState 属性がないため、!this.readyState はこれらのブラウザ用です。 ReadyState は IE ブラウザ用です。キャッシュの場合は読み込みが完了する場合があります。したがって、2 がそれ以下になることはありません。ただし、IE9/10 はすでに onload イベントをサポートしているため、コールバックは 2 回実行されます。
関連:
http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1
http://www.w3.org/TR/html5/scripting-1.html#script
https://developer.mozilla.org/En/HTML/Element/Script