Jul*_*oux 46 javascript error-handling onerror
Javascript有这个很棒的回调window.onerror.跟踪任何错误都非常方便.但是,它调用错误名称,文件名和行.它肯定没有从try...catch语句中获取实际的错误对象那么丰富.实际的错误对象包含更多的数据,所以我试图得到它.不幸的是,try...catch当你开始使用异步代码时,语句不能正常工作.
有没有办法结合并获得两全其美?我最初寻找一种方法来获取块中触发的最后一个错误onerror,但看起来JS不存储它.
任何线索?
Arc*_*ron 47
现在可以在某些浏览器中使用.该规范已更新为包括与堆栈跟踪作为第五个参数的实际错误.
问题是并非每个浏览器都支持这个,所以你可以这样做:
window.onerror = function(message, filename, lineno, colno, error)
{
if(error != null)
{
//handle the error with stacktrace in error.stack
}
else
{
//sadly only 'message', 'filename' and 'lineno' work here
}
};
Run Code Online (Sandbox Code Playgroud)
Mrc*_*ief 10
如果您指的是错误对象的堆栈跟踪,那么AFAIK,这是不可能的.
简单的原因是堆栈跟踪与执行上下文相关,在执行上下文中创建或抛出运行时异常(使用try ... catch ...最终处理)(使用new Error()或throw).
而在window.onerror调用时,它会在不同的上下文中调用.
您可以通过检查处理程序中的window.event(在FF上不可用)获得一些里程onerror.
现代浏览器完全支持为HTML 5规范草案的ErrorEvent和window.onerror.在这两种浏览器中,您可以使用window.onerror,或者(令人惊讶地!)正确绑定到'error'事件:
// Only Chrome & Opera pass the error object.
window.onerror = function (message, file, line, col, error) {
console.log(message, "from", error.stack);
};
// Only Chrome & Opera have an error attribute on the event.
window.addEventListener("error", function (e) {
console.log(e.error.message, "from", e.error.stack);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20064 次 |
| 最近记录: |