ember(-cli)app可以触发window.onerror吗?

时间:2016-01-29 15:57:55

标签: ember.js error-handling

在ember(-cli)应用程序中onerror是否有任何类型的javascript错误?换句话说,是否需要向window.onerror添加处理程序?

在我的测试中,我无法想出任何不会被Ember的错误处理的错误。语法错误没有超过ember-cli的构建过程。

3 个答案:

答案 0 :(得分:2)

EmberJS可以很好地控制在其边界内发生的错误。由Ember代码引起的错误应该全部汇集到Ember特定的处理程序中。

然而,浏览器JavaScript是一个复杂的野兽。发生在Ember 之外的任何JavaScript错误都不会在内部捕获,只能由全局window.onerror公开。这些的一些例子可能包括:

  • setTimeoutaddEventListener
  • 等原生函数进行无限回调
  • 非ember JavaScript库和集成,例如Stripe,Twitter或广告
  • 浏览器扩展脚本,可以以不可预测的方式与DOM交互。

要全面了解访问者的情况,您应该同时附加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/