如何在 IE8 中包装 attachEvent
How to wrap attachEvent in IE8
现在我们正在研究一种方法来捕获 JavaScript 中发生的错误。我们可以在包括 IE9 和 IE9 之后的浏览器中使用所有功能。
在现代浏览器中,我们可以用执行 try/catch
的函数包装 window.EventTarget.prototype.addEventListener
以捕获错误。例如我们可以这样做:
var addEventListener = window.EventTarget.prototype.addEventListener;
window.EventTarget.prototype.addEventListener = function (event, callback, bubble) {
return addEventListener.call(this, event, WATCH_FUNCTION(callback), bubble)
};
上面的WATCH_FUNCTION
里面有我们的try/catch
。现在我们无法找到一种方法来包装 IE8 中元素上存在的 attachEvent
。例如:
var myObject = document.getElementById('my-id');
myObject.attachEvent('onclick', function () {reference-to-undefined-var});
我们希望包装将由附加事件引发的错误。现在我们无法弄清楚如何始终 包装 attachEvent。我们将成为第三方图书馆,因此我们不能强迫人们使用不同形式的附加事件。
作为对任何查看此问题的人的说明,我已尝试覆盖以下内容并且 none 似乎有效:
Object.prototype.attachEvent
Element.prototype.attachEvent
window.attachEvent
我终于弄清楚我做错了什么,以下似乎在 IE8 中有效。对于所有其他浏览器,您可以简单地覆盖 window.EventTarget
版本。基本上我没有使用 call
,否则它不知道调用 attachEvent
的上下文。
var attachEvent = window.Element.prototype.attachEvent,
detachEvent = window.Element.prototype.detachEvent;
window.Element.prototype.attachEvent = function (event, callback) {
return attachEvent.call(this, event, watch(callback));
};
window.Element.prototype.detachEvent = function (event, callback) {
return detachEvent.call(this, event, watch(callback));
};
现在我们正在研究一种方法来捕获 JavaScript 中发生的错误。我们可以在包括 IE9 和 IE9 之后的浏览器中使用所有功能。
在现代浏览器中,我们可以用执行 try/catch
的函数包装 window.EventTarget.prototype.addEventListener
以捕获错误。例如我们可以这样做:
var addEventListener = window.EventTarget.prototype.addEventListener;
window.EventTarget.prototype.addEventListener = function (event, callback, bubble) {
return addEventListener.call(this, event, WATCH_FUNCTION(callback), bubble)
};
上面的WATCH_FUNCTION
里面有我们的try/catch
。现在我们无法找到一种方法来包装 IE8 中元素上存在的 attachEvent
。例如:
var myObject = document.getElementById('my-id');
myObject.attachEvent('onclick', function () {reference-to-undefined-var});
我们希望包装将由附加事件引发的错误。现在我们无法弄清楚如何始终 包装 attachEvent。我们将成为第三方图书馆,因此我们不能强迫人们使用不同形式的附加事件。
作为对任何查看此问题的人的说明,我已尝试覆盖以下内容并且 none 似乎有效:
Object.prototype.attachEvent
Element.prototype.attachEvent
window.attachEvent
我终于弄清楚我做错了什么,以下似乎在 IE8 中有效。对于所有其他浏览器,您可以简单地覆盖 window.EventTarget
版本。基本上我没有使用 call
,否则它不知道调用 attachEvent
的上下文。
var attachEvent = window.Element.prototype.attachEvent,
detachEvent = window.Element.prototype.detachEvent;
window.Element.prototype.attachEvent = function (event, callback) {
return attachEvent.call(this, event, watch(callback));
};
window.Element.prototype.detachEvent = function (event, callback) {
return detachEvent.call(this, event, watch(callback));
};