Ember.js 余烬(-cli)应用程序能否触发window.onerror?
在ember(-cli)应用程序中是否存在任何类型的javascript错误不由处理?换言之,是否需要将处理程序添加到Ember.js 余烬(-cli)应用程序能否触发window.onerror?,ember.js,error-handling,Ember.js,Error Handling,在ember(-cli)应用程序中是否存在任何类型的javascript错误不由处理?换言之,是否需要将处理程序添加到 在我的测试中,我没有发现任何错误,而这些错误都不会被Ember的onerror处理。语法错误没有通过ember cli的构建过程。根据我的经验,我不建议实现窗口.onerror,除非您有充分的理由这样做,并且您知道自己可能在做什么 据我所知,Ember的所有onerror方法都依赖于窗口。onerror覆盖它有可能覆盖/禁用应用程序中的所有错误 举个例子,我最近有一次经历,我注
在我的测试中,我没有发现任何错误,而这些错误都不会被Ember的onerror处理。语法错误没有通过ember cli的构建过程。根据我的经验,我不建议实现
窗口.onerror
,除非您有充分的理由这样做,并且您知道自己可能在做什么
据我所知,Ember的所有onerror
方法都依赖于窗口。onerror
覆盖它有可能覆盖/禁用应用程序中的所有错误
举个例子,我最近有一次经历,我注意到我所有的js错误都停止登录到控制台。原因是我的团队中的另一个开发人员在我的index.html中引入了一个
标记,该标记利用了window.onerror
来生成一些错误报告脚本。结果是,重写窗口
几乎禁用了所有ember的onerror
,因为它们以冒泡的方式工作
我认为,如果您确实想覆盖window.onerror
您需要确保它总是返回false
,这样它就不会阻止浏览器上的默认错误处理
见:
我希望这在某种程度上有助于澄清。余烬有一个内置的错误事件,您可以在路由中使用它
actions: {
error(error, transition) {
if (error && error.status === 400) {
//handle error
}
}
}
更多信息:EmberJS在控制其边界内发生的错误方面做得非常好。由余烬代码引起的错误都应该被导入特定于余烬的处理程序中 然而,浏览器JavaScript是一个复杂的野兽。在Ember的外部发生的任何JavaScript错误都不会在内部捕获,并且只能通过全局
窗口暴露。onerror
。其中一些例子包括:
- 对本机函数(如
和setTimeout
addEventListener
- 非余烬JavaScript库和集成,如Stripe、Twitter或广告
- 可以以不可预知的方式与DOM交互的浏览器扩展脚本
Ember.onerror
和窗口.onerror
,并将报告发送回日志。即使您不是在积极开发,浏览器更改也可能导致应用程序中出现突然的错误。喜欢有一些很好的选项可以自动记录来自余烬应用程序的错误,比如
披露:我是TrackJS的创始人之一,所以我调试了很多错误:)你应该处理
window.onerror
Ember.onerror
和Ember.RSVP.onerror
你有什么证据或例子说明我为什么要处理window.onerror
?如果你已经处理了Ember.RSVP.onerror
,那就没有必要处理Ember.RSVP.onerror>Ember.onerror
。在我看来,整个Ember运行循环都包装在try-catch中,所以应用程序代码错误应该100%由这个Ember.onerror处理。然而,我不确定这就是为什么它是一个评论。:)ember.onerror无法捕获数千个潜在错误。应用程序启动前抛出的任何错误、应用程序范围之外的任何错误(想想第三方异步)、大多数网络错误、大多数CSP错误,以及您自己的代码在ember范围之外执行的任何异步错误。