Javascript 未捕获的异常处理/window.onerror 消息参数格式

标签 javascript error-handling chromium

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

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/

相关文章:

node.js - Electron : HellowWorld application is not starting

javascript - 新的数据库元素只能通过刷新整个页面来显示

javascript - 如何使整个 'li' 区域和文本成为可点击的链接

python - 'int' 对象没有属性 'sub' ?

java - 如何使用扫描仪类 : Exception in thread "main". 解决此错误 ..?

linux - 为 DragonBoard 410c 构建 Yocto 镜像,如何构建 Chromium

javascript - sweetalert 删除确认 laravel

javascript - 管理 node-postgres 查询

sql - 如何从Postgres中的函数向另一个表中插入错误?

google-chrome - Chrome content_script : How to wait for jQuery