【问题标题】:Can an ember(-cli) app trigger window.onerror?ember(-cli) 应用程序可以触发 window.onerror 吗?
【发布时间】:2016-01-29 15:57:55
【问题描述】:

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

在我的测试中,我无法提出任何 Ember 的 onerror 无法处理的错误。语法错误没有通过 ember-cli 的构建过程。

【问题讨论】:

  • 你应该处理 window.onerror Ember.onerrorEmber.RSVP.onerror
  • 你有什么证明或例子说明我为什么要处理window.onerror
  • 如果您已经处理了Ember.onerror,则不需要处理Ember.RSVP.onerror。见the code
  • 对我来说,整个 Ember 运行循环都包含在 try catch 中,因此应用程序代码错误应该 100% 由这个 Ember.onerror 处理。但是我不确定这就是评论的原因。 :)
  • ember.onerror 无法捕捉到数以千计的潜在错误。应用启动前抛出的任何错误、应用范围之外的任何错误(想想第 3 方异步)、大多数网络错误、大多数 CSP 错误以及您自己的代码在 ember 范围之外执行的任何异步错误。

标签: ember.js error-handling


【解决方案1】:

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 的创始开发人员之一,所以我调试了很多错误:)

【讨论】:

    【解决方案2】:

    根据我的经验,我不建议实施window.onerror,除非您有充分的理由这样做并且您知道自己可能在做什么。

    据我所知,Ember 的所有 onerror 方法都搭载在 window.onerror 上,并且覆盖它有可能覆盖/禁用应用中的所有错误。

    举个例子,我最近有一次经历,我注意到我所有的 js 错误都完全停止了记录到控制台。原因是我团队中的另一位开发人员引导到我的 index.html 中注入了一个 <script> 标签,该标签利用 window.onerror 进行一些错误报告脚本。结果是覆盖 window 几乎禁用了所有 ember 的 onerror,因为它们以冒泡方式工作。

    我认为,如果您确实想要覆盖 window.onerror,您需要确保它始终返回 false,这样它就不会阻止浏览器上的默认错误处理。

    见:https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror

    我希望这在某种程度上有助于澄清。

    【讨论】:

      【解决方案3】:

      Ember 有一个内置的错误事件,您可以在路由中使用

        actions: {
          error(error, transition) {
            if (error && error.status === 400) {
              //handle error
            }
          }
        }
      

      更多信息:https://guides.emberjs.com/v2.0.0/routing/loading-and-error-substates/

      【讨论】:

        猜你喜欢
        • 2011-08-22
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 1970-01-01
        • 2015-03-03
        相关资源
        最近更新 更多