使用 window.onerror 和 try-catch 块处理错误之间的差异
Differences between handling errors with window.onerror and try-catch block
我正在考虑使用 window.onerror
与 JavaScript 运行时错误来处理 JavaScript 运行时错误。 try{...} catch(e){...}
块。
https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onerror 指出:
请注意,某些/许多错误事件不会触发 window.onerror,您必须专门侦听它们。
似乎window.onerror
和try{...} catch(e){...}
都可以处理引用错误:http://jsfiddle.net/7RARf/
此外,两者都无法处理语法错误:http://jsfiddle.net/UXVs2/
除了使用 window.onerror
处理错误和try{...} catch(e){...}
like 处理错误之间的明显区别外,try-catch 允许我们优雅地处理错误,重新抛出它们等,而 window.onerror 函数则不然,等等。是否有任何错误可以用window.onerror
处理,但不能用try{...} catch(e){...}
处理?反之亦然?
可以检测由浏览器工作流程引起的错误 - try/catch 仅在执行的 js 代码的有限部分上运行。 window.onerror 可能会检测插件问题或由不严格意义上的代码引起的任何错误(像 jQ 这样的库,像 YT API 等的 API( - 例如:你不能把外部库支持的异步代码放在try中(不修改外文代码(, 您不能将 HTML 标签完成的脚本加载放入 try(它由浏览器管理( - 当脚本文件损坏并且无法加载到标签时,window.onerror 将触发 - window.onerror 抛出的错误比 catch 能够支持的错误多得多 - 它还包含有关文件和行的信息。缺点是window.onerror只提供信息 - 代码被中断,使用try/catch你可以提供回退行为并允许代码处理情况 - 即使有错误
您可以使用 try/catch 来捕获语法错误,但前提是您正在计算代码表单字符串:
try{
eval('(function(){asdhaowd;;;;asd;!!!@#!@$lolzolololol]]]]]]]})()');
} catch(e){
do sth();
}
它会捕获评估错误(意外的"]"或之前的内容(我在我的网站上使用它来检测用户上传的损坏代码。window.onerror 仅用于调试 - 它不能防止代码崩溃,当尝试可以
window.onerror 就像一个全局的 try/catch 块。 使用 try/catch 来定位您知道可能会出错的特定块。
window.onerror 是一般情况。 我注意到的一件事是,您分配给window.onerror以处理错误的函数应该在调用它的代码之上定义,否则您可能会遇到未定义的函数错误。
- alert和ajax之间的罕见错误
- 未捕获的错误:断言失败:余烬视图需要 1.7 和 2.1 之间的 jQuery
- 计算当天和另一个日期之间的差额时出现错误差异
- 在带有时间戳的日期之间计算时出现 NaN JavaScript 错误
- Esri 和 Python 之间的连接错误
- 未捕获的引用错误和未定义之间有什么区别
- 使用 window.onerror 和 try-catch 块处理错误之间的差异
- 2 个日期之间的 JavaScript 天返回错误
- 计算两个日期之间的差异会导致错误的计算
- Chrome 扩展程序会提取错误的元数据,而不会重新加载整页(原始 HTML 和浏览器解释之间存在差异)
- 得到"未捕获错误:断言失败:Ember视图需要1.7和2.1之间的jQuery“;通过ember-cli创建的
- ng重复获取错误之间的间隔
- 获取两个日期之间的日期返回指定日期范围之外的错误日期
- javascript/整个脚本块(在脚本标记之间)被禁用,没有错误消息
- 如何在angular http请求的错误和成功回调之间共享变量
- Javascript正则表达式错误,两个字符之间的文本
- 服务器和客户端之间的响应方法错误
- AngularJS指令与指令之间的通信抛出控制器未找到的错误
- AngularJS模型和控制器之间的类型错误
- jquery在密码和文本字段之间切换IE错误