私はこの部分に問題があります:
var ex = {
exampl: function(){
var ref=window.event.target||window.event.srcElement; // here
alert(ref.innerHTML); // (example)
}
}
この関数は次のように呼び出されます。
document.body.childNodes[0].addEventListener('mouseover',ex.exampl,true);
Firefoxのみがwindow.event
は定義されていません...
私はそれを機能させるために何をすべきかわかりません。 Webkitブラウザーでは非常にうまく機能し、opera(MSIEでは確認できず、気にしません)。
なぜ起こるのですか?
渡されたパラメーター(この場合はe
という名前)を使用してイベントを取得してください。これと両方をテストしましたwindow.event
およびe
はchromeでサポートされています。
var ex = {
exampl: function(e){
console.log(window.event);
console.log(e);
//check if we have "e" or "window.event" and use them as "evt"
var evt = e || window.event
}
}
_window.event
_は機能ではなく、バグです!
引用 [〜#〜] mdn [〜#〜] :
_
window.event
_は、Microsoft Internet Explorer独自のプロパティであり、DOMイベントハンドラーが呼び出されている間のみ利用可能です。その値は、現在処理されているEventオブジェクトです。
最も重要な:
仕様の一部ではありません。
_window.event
_は非標準であるため、anyがそれをサポートすることを期待しないでください。
element.addEventListener()
のコールバック関数の最初のパラメーターはEvent
オブジェクトです。 _window.event
_の代わりに使用します。
なぜならwindow.event
はFirefoxには存在しません。これは、ブラウザーにはさまざまなイベントモデルがあり、それらの違いに対処するか、ブラウザー間のすべての違いに対処する必要がないようにjQueryのようなライブラリを使用する必要があるためです。 DOMへようこそ。
Chromeにもネイティブではありません。すべてのイベントトリガーが独自のイベントオブジェクトを渡すのではなく、IEプロパティをwindow.eventにドロップし、それを渡しました。一度に1つのイベントしか処理しないため、これは機能しました。すべてのブラウザには、イベントオブジェクトの実際のコンストラクタであるwindow.Eventが必要です。IE8以下以外で「window.event」が表示されている場合は、空のタブでコンソールを開いて、そこにログを記録するかアラートを出します。見ているページに何かを手動で追加しています。
イベントハンドラーのクロスブラウザー正規化コードを見ると、次のことがよくわかります。
if(!e){ e = window.event; }
IEの古いバージョンを処理するコードを正規化するイベントです。最新のブラウザでは、eはウィンドウのプロパティへの参照ではなく、引数を介して渡される独自のオブジェクトである必要があります。
window.event
は Firefoxバージョン63以降 (2018年10月下旬リリース予定)で利用可能になります。