IE のすべてのバージョンがイベントを引数として渡すわけではありません。ですwindow.event
。これを _addEvent shim またはイベント ハンドラーに追加できます。
e = e || window.event
次のように:
_addEvent(eventableIframes[i], 'mousemove', function (e) {
e = e || window.event;
utilBarHandler(e);
});
IEまたはその他のいずれかで動作します。
event
IE でとthis
ポインターの両方が適切に設定されていることを確認するクロス ブラウザー イベント処理の 2 つのフレーバーを次に示します。
// add event cross browser
function addEvent(elem, event, fn) {
if (elem.addEventListener) {
elem.addEventListener(event, fn, false);
} else {
elem.attachEvent("on" + event, function() {
// set the this pointer same as addEventListener when fn is called
return(fn.call(elem, window.event));
});
}
}
// refined add event cross browser
function addEvent(elem, event, fn) {
// avoid memory overhead of new anonymous functions for every event handler that's installed
// by using local functions
function listenHandler(e) {
var ret = fn.apply(this, arguments);
if (ret === false) {
e.stopPropagation();
e.preventDefault();
}
return(ret);
}
function attachHandler() {
// set the this pointer same as addEventListener when fn is called
// and make sure the event is passed to the fn also so that works the same too
var ret = fn.call(elem, window.event);
if (ret === false) {
window.event.returnValue = false;
window.event.cancelBubble = true;
}
return(ret);
}
if (elem.addEventListener) {
elem.addEventListener(event, listenHandler, false);
} else {
elem.attachEvent("on" + event, attachHandler);
}
}