在ember(-cli)应用程序中onerror是否有任何类型的javascript错误?换句话说,是否需要向window.onerror添加处理程序?
在我的测试中,我无法想出任何不会被Ember的错误处理的错误。语法错误没有超过ember-cli的构建过程。
答案 0 :(得分:2)
EmberJS可以很好地控制在其边界内发生的错误。由Ember代码引起的错误应该全部汇集到Ember特定的处理程序中。
然而,浏览器JavaScript是一个复杂的野兽。发生在Ember 之外的任何JavaScript错误都不会在内部捕获,只能由全局window.onerror
公开。这些的一些例子可能包括:
setTimeout
和addEventListener
要全面了解访问者的情况,您应该同时附加Ember.onerror
和 window.onerror
并将报告发送回日志。即使您没有积极开发,浏览器更改也可能导致应用程序中出现突然错误。像this webkit bug that caused ember to throw errors一样。有很好的选项可以自动记录Ember应用程序中的错误,例如TrackJS。
披露:我是TrackJS的创始开发者之一,所以我调试了很多错误:)
答案 1 :(得分:0)
根据我的经验,我不会建议实施window.onerror
,除非你有充分理由这样做并且你知道你在做什么。
据我所知,Ember的所有onerror
方法都捎带到window.onerror
并覆盖它有可能覆盖/禁用应用中的所有错误。
例如,我最近有过一次经历,我注意到我所有的js错误都完全停止了登录到控制台。原因是我的团队中的另一位开发人员已经引导到我的index.html中以注入一个<script>
标记,该标记使用window.onerror
作为一些错误报告脚本。结果是覆盖window
使得所有余烬onerror
失效,因为他们以冒泡的方式工作。
我认为如果你想覆盖window.onerror
,你需要确保它总是返回false
,这样就不会阻止浏览器上的默认错误处理。
请参阅:https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror
我希望这有助于在某种程度上澄清。
答案 2 :(得分:-1)
Ember有一个内置错误事件,您可以在路线中使用
actions: {
error(error, transition) {
if (error && error.status === 400) {
//handle error
}
}
}
更多信息:https://guides.emberjs.com/v2.0.0/routing/loading-and-error-substates/