javascript - 如何在IE8中包装attachEvent

标签 javascript error-handling custom-error-handling

现在我们正在研究一种捕获 JavaScript 中发生的错误的方法。我们可以在包括 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。我们将成为第三方库,因此我们不能强制人们使用不同形式的附加事件。

作为对任何查看此问题的人的说明,我尝试覆盖以下内容,但似乎都不起作用:

  • 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 - 如何在IE8中包装attachEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28055203/

相关文章:

javascript - html或javascript,如何找出程序文件文件夹在哪里?

javascript - 获取 Sequelize Promise 的内容而不执行它

javascript - 使用 Javascript/JQuery 禁用整个 DIV

javascript - 如何将表单元素与变量结合起来?

android - 在 Android 中的 GreenADO 中生成重复类

asp.net-mvc - Controller MVC中的错误传播

codeigniter - 使用Codeigniter的文件上传类时,如何设置max_filename错误消息?

angular - Angular-从组件更新服务的属性

javascript - 在 ES6 Node.js 中,如何让一个类随处可用?

spring - 如何确保解析期间的异常导致与验证失败返回的(自定义)响应相同类型的响应?