如何在IE8中包装attachEvent

时间:2015-01-20 21:10:40

标签: javascript error-handling custom-error-handling

目前我们正致力于捕捉JavaScript中发生的错误。我们已经在浏览器中工作,包括和IE9之后。

在现代浏览器中,我们可以使用window.EventTarget.prototype.addEventListener函数包装try/catch以捕获错误。例如,我们可以这样做:

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。我们将成为第三方图书馆,因此我们不能强迫人们使用不同形式的附加事件。

作为对任何看过这个问题的人的说明,我试图覆盖以下内容并且似乎都没有效果:

  • Object.prototype.attachEvent
  • Element.prototype.attachEvent
  • window.attachEvent

1 个答案:

答案 0 :(得分:1)

我终于弄清楚我做错了什么,以下似乎在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));
  };