我需要能够捕获一种可能发生在许多不同页面/脚本中的错误,并在发生此错误时执行自定义逻辑。我打算用
window.onerror = function (msg, url, line) {
if ({{my specific error happened}}){
{{do some custom work}};
return true;
}
//do nothing and let the browser notify the user of all the other errors
}
所以我可以在某个地方throw {{my specific error}}
并在window.onerror
中捕获它。我尝试了 throw "Magic";
但随后在 window.onerror
中我得到了 msg == "Uncaught Magic"
。 msg
的这个 "Uncaught " 部分是否总是在我抛出的字符串之前?我可以依靠它来检测我的特定错误吗?
或者是否有其他机制来检测 window.onerror
中的错误类型?
我只需要它在 Chromium 中工作。
最佳答案
一些浏览器现在传递实际的错误对象。不确定哪些浏览器支持这个。 Here据说需要Gecko 31。不知道 chrome 和其他。
您可以创建一个自定义错误,例如:
Magic = function( message ) {
this.name = 'Magic';
this.message = message;
}
Magic.prototype = new Error();
Magic.prototype.constructor = Magic;
把它扔到某处:
throw new Magic('Kaboom');
然后像这样在 window.onerror
中捕获它:
window.onerror = function ( message, filename, lineno, colno, error ){
if ( error !== undefined && error.hasOwnProperty( "name" ) && error.name == "Magic"){
alert("some uncaught magic caused: " + message +" - in "+filename +"("+lineno+")" );
return true;
}
}
检查fiddle **
您还可以检查消息是否包含“Magic”,但您可能会意外捕获其他包含“Magic”的错误。
ps:对不起死灵,我偶然发现了这个搜索相同的..所以我想我也可以添加一个答案..
关于Javascript 未捕获的异常处理/window.onerror 消息参数格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069069/