選択したイベントにリスナーをアタッチし、どのバージョンの一般的なブラウザーでも機能するコードを作成する必要があります。いくつかの検索を行った後、次の機能を見つけました。
function addListener(event, thefunction)
{
if(window.addEventListener)
{
//All browsers, except IE before version 9.
window.addEventListener(event, thefunction, false);
}
else if(window.attachEvent)
{
//IE before version 9.
window.attachEvent(event, thefunction);
}
}
非常にシンプルで、一目瞭然のようです。
DOMContentLoaded
IE(AFAIK)のどのバージョンもそれを認識しないため、イベントに問題がある可能性があり、開発者はonreadystatechange
代わりに使用する義務があります。Internet Explorer 9 までは、この問題を解決するのもかなり簡単に思えましたelse if(window.attachEvent)
。
event = (event == 'DOMContentLoaded') ? 'onreadystatechange' : "on" + event;
この部分は Internet Explorer のどのバージョンでも常に起動され、この行はイベント名の単純な変換を提供したため、正しいものが常に使用されました。
しかし、Internet Explorer 9 (およびそれ以降) についてはどうでしょうか。マイクロソフトはattachEvent
、addEventListener
. onreadystatechange
しかし、 に変わりませんDOMContentLoaded
。
上記の行はwindow.addEventListener
部分的に使用できません。これは、他のブラウザーでもイベントに書き換えDOMContentLoaded
られonreadystatechange
、そこで失敗するためDOMContentLoaded
です。
したがって、この問題を解決する唯一の方法は、ブラウザー検出 (タイプとバージョン) をwindow.addEventListener
一部に追加することです。スクリプトが IE 9 以降を処理していることを検出した場合、イベント名を からDOMContentLoaded
に書き換え、onreadystatechange
他のイベント名を補足します。 、on
IE に必要)、および他のブラウザの場合、イベント名は変更されませんか?
DOMContentLoaded
または、テストしたばかりのように、IE 8でも起動されていないため、間違っている可能性がonreadystatechange
あります(最初のものはFF / Chromeで正しく起動します)。
そして、jQuery の.on()
関数 (または類似のもの) はどうですか? のクロスブラウザアタッチをサポートしているかどうか、誰もが知っているDOMContentLoaded
ので、この特定の種類のイベントが、使用しているブラウザまたはバージョンに関係なく、スクリプトによってキャッチされることを確認できますか?