【问题标题】:Ecmascript use of window.onerrorecmascript 使用 window.onerror
【发布时间】:2012-05-28 19:54:15
【问题描述】:

所以我试图围绕我刚刚在 Nicholas Zakas 的“专业 Javascript”中读到的内容:它以以下代码为例:

window.onerror = function(message, url, line){
alert(message);
return false;
};

然后说:“通过返回 false,此函数有效地成为整个文档的 try-catch 语句,捕获所有未处理的运行时错误。此事件处理程序是最后一道防线防止错误被浏览器报告..”

所以我的问题是,如果遇到任何错误,这段代码会阻止脚本的执行吗?还是有任何错误仍会停止执行?谢谢。


编辑:也许更好的问题是,为什么这不是防止脚本在遇到错误时停止执行的好方法..

【问题讨论】:

  • 代码停止,但回调触发。
  • 类似“try catch”的行为不会导致它无法停止吗?

标签: javascript


【解决方案1】:

我相当肯定,无论是否忽略异常,语法错误之类的东西都会被认为是致命的。

使用这个是个坏主意,部分原因是浏览器的错误控制台中已经有一个完全足够的异常处理机制,但主要是因为如果您的网站有错误,那么当着用户的面爆破它们不会使它们可能返回。

【讨论】:

  • 同意,但也许如果你修改它说 console.log(...) 而不是警报?
  • mm,我明白了。你的脚本。
  • @MattDerami 错误的全部意义在于它们不应该存在。不顾错误继续操作可能会产生安全隐患。
  • kolink.. 不,我明白了。我问的原因是因为我刚刚开始使用 wordpress 构建 cms 网站,并且有无数次客户可能会在在帖子上插入图片或其他一千件事之前说点击输入。所以就像它说的那样帖子,这可以作为最后一道防线。所以我只是想了解它是如何工作的。
  • 应用程序逻辑错误应该在它们出现的地方处理,而不是在一个包罗万象的地方。例如,客户端在帖子上插入图像之前按回车键应该在表单的 onsubmit 处理程序中处理。
【解决方案2】:

一个非常简单的测试表明情况并非如此(至少对于 Chrome):

window.onerror = function(message, url, line){
    alert(message);
    return false;
};
throw 'Catch this error';

没有警报,控制台中出现未捕获的异常。

【讨论】:

  • 是的,我认为window.onerror 只会在某些时候触发,但我不知道在什么情况下:\
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2011-10-29
  • 2020-05-16
相关资源
最近更新 更多