1

我正在寻找覆盖事件并仍然执行它的操作。

意思是这样的:

var oldOnError = window.onerror;
window.onerror = function(msg, url, line) {
 oldOnError();
};

现在这将被执行,但是onerror事件可以接受几个参数,我不知道也不知道有哪些。

所以 :

  • 有一个简单的解决方案吗?
  • 如果没有,我怎么知道oldOnError期望得到什么参数?
4

2 回答 2

1

为什么不使用 addEventListener()

var listener = function(msg, url, line) {
 // your code
};

if (window.addEventListener) {
    window.addEventListener('error', listener, false);
} else if ( window.attachEvent ) { // for versions previous to IE9
    window.attachEvent( 'onerror', listener );
}

这样您就不会覆盖现有的事件侦听器。

要注意的另一件事是,即使您指定了 3 个参数,您的函数在调用时也会传递一个事件对象。所以实际上你的函数应该定义如下。

var listener = function( event ) {
    // your code
}

在此处查看MDN 站点以获取更多信息

于 2012-11-28T15:09:50.067 回答
0

您可以做的一件事是使用 apply 方法和 arguments 变量:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function /申请

var oldOnError = window.onerror;
window.onerror = function(msg, url, line) {
    oldOnError.apply(window, arguments);
};

但正如@Bruno 所说,无论如何都应该只将一个参数传递给处理程序(事件)。

于 2014-01-17T19:43:35.353 回答