如何使用window.onerror捕获所有javascript错误? (包括道场)

时间:2011-12-09 14:22:56

标签: javascript error-handling dojo

这个问题是javascript: how to display script errors in a popup alert?的后续问题,其中解释了如何使用以下方法捕获常规javascript错误:

<script type="text/javascript">
    window.onerror = function(msg, url, linenumber) {
        alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber);
        return true;
    }
</script>

我试过了,发现像这样的道场错误:

TypeError: this.canvas is undefined         dojo.js (Row 446)

没有报告使用这种方法,这引出了我的问题:

如何使用window.onerror报告所有 javascript错误(特别是dojo错误)?

3 个答案:

答案 0 :(得分:14)

可能是Dojo正在使用正确的错误处理方法(即try-catch块),这可以防止异常冒泡并到达已注册错误处理程序的窗口容器。

如果是这样,那么 无法执行此操作。没有错误超过catch块,因此没有调用错误处理程序。

正如评论中所指出的,您还可以使用特定于浏览器的调试API,例如Venkman钩子,并执行错误解决 - 这种解决方案通常仅适用于特权代码(感谢@Sam Hanes)。 / p>

你也可以On(require, 'error', function () {});在DOJO的异步脚本加载器上添加错误处理 - @buggedcom评论中提到的另一点

答案 1 :(得分:1)

你可以写这样的代码:

var goErrHandler=window.onerror;
goErrHandler= function(msg, url, linenumber) {
console.log('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber);
return true;
}

goErrHandler();

所以在控制台中你会看到这样的事情:

Error message: undefined
URL: undefined 
Line Number: undefined

答案 2 :(得分:1)

更好的解决方案是使用try / catch,例如

try{
    if(a=='a'){

    }
}catch(e){
    alert(e);
    //or send to server
    new Image().src='errorReport.php?e='+e;
}

Google Plus似乎使用此功能。