我正在寻找覆盖事件并仍然执行它的操作。
意思是这样的:
var oldOnError = window.onerror;
window.onerror = function(msg, url, line) {
oldOnError();
};
现在这将被执行,但是,onerror
事件可以接受几个参数,我不知道也不知道有哪些。
所以 :
- 有一个简单的解决方案吗?
- 如果没有,我怎么知道
oldOnError
期望得到什么参数?
我正在寻找覆盖事件并仍然执行它的操作。
意思是这样的:
var oldOnError = window.onerror;
window.onerror = function(msg, url, line) {
oldOnError();
};
现在这将被执行,但是,onerror
事件可以接受几个参数,我不知道也不知道有哪些。
所以 :
oldOnError
期望得到什么参数?为什么不使用 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 站点以获取更多信息
您可以做的一件事是使用 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 所说,无论如何都应该只将一个参数传递给处理程序(事件)。