4

我需要能够捕获可能在许多不同页面/脚本中发生的一种错误,并在发生此错误时执行自定义逻辑。我打算用

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总是在我抛出的字符串之前?我可以依靠它来检测我的特定错误吗?或者是否有其他机制来检测错误类型window.onerror
我只需要它在 Chromium 中工作。

4

1 回答 1

3

一些浏览器现在传递实际的错误对象。不确定哪些浏览器支持此功能。据说这里需要 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;
    }
}

检查小提琴**


您还可以检查消息是否包含“Magic”,但您可能会意外捕获其他包含“Magic”的错误。


ps:对不起necro,我偶然发现了这个寻找相同的东西..所以我想我不妨添加一个答案..

于 2014-08-22T14:42:28.690 回答