2016-01-29 3 views
8

Есть ли какая-либо ошибка javascript, которая не обрабатывается onerror в приложении ember (-cli)? Другими словами, есть ли необходимость добавить обработчик к window.onerror?Может ли приложение ember (-cli) запускать окно window.onerror?

В моих тестах я не мог придумать никаких ошибок, которые не были бы обработаны террором Эмбера. Синтаксические ошибки не прошли мимо процесса сборки ember-cli.

+1

Вы должны обращаться с '' window.onerror' Ember.onerror' и 'Ember.RSVP.onerror ' – runspired

+0

У вас есть какие-либо доказательства или примеры того, почему я должен обрабатывать' window.onerror'? – pogopaule

+0

Нет необходимости обрабатывать 'Ember.RSVP.onerror', если вы уже обрабатываете' Ember.onerror'. См. [Код] (https://github.com/emberjs/ember.js/blob/v2.2.2/packages/ember-runtime/lib/ext/rsvp.js#L71) – pogopaule

ответ

0

По моему опыту, я бы не посоветовал реализовать window.onerror, если у вас нет веских оснований для этого, и вы знаете, что вы можете делать.

Насколько я знаю, все методы Ember's onerror копируются на window.onerror и переопределяют его, чтобы переопределить/отключить всю ошибку в вашем приложении.

Дело в том, что у меня недавно был опыт, когда я заметил, что все мои ошибки js перестали записываться на консоль вообще. Причина заключалась в том, что другой разработчик в моей команде загрузился в мой index.html, чтобы ввести тег <script>, который использовал window.onerror для некоторого сценария отчетов об ошибках. В результате получилось, что переопределение window литерно отключило всех onerror ember, потому что они работают в пузырящейся манере.

Я думаю, что если вы хотите переопределить window.onerror, вам необходимо убедиться, что он всегда возвращает false, чтобы он не предотвращал обработку ошибок по умолчанию в браузере.

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

Я надеюсь, что помогает уточнить в какой-то степени.

2

EmberJS делает отличную работу, содержащие ошибки, которые происходят в пределах своих границ. Ошибки, вызванные вашим кодом Ember, должны быть перенаправлены в обработчик Ember.

Однако браузер JavaScript является сложным зверем. Любые ошибки JavaScript, которые происходят снаружи из Ember не будут захвачены внутри и могут быть выставлены только глобальным window.onerror. Некоторые примеры из них могут включать в себя:

  • неограниченного обратных вызовов в собственные функции, такие как setTimeout и addEventListener
  • Non-уголек JavaScript библиотеки и интеграции, такие как Stripe, Twitter или рекламы
  • Browser-расширение сценария, который может взаимодействовать с DOM непредсказуемыми способами.

Чтобы получить полное представление о том, что происходит с вашими посетителями, вероятно, вы должны приложить и к Ember.onerrorиwindow.onerror и отправлять отчеты назад в журналах. Даже если вы не активно развиваетесь, изменения в браузере могут привести к появлению неожиданных ошибок в вашем приложении. Мне нравится this webkit bug that caused ember to throw errors. Есть хорошие возможности автоматически записывать ошибки из приложений Ember, например TrackJS.

Раскрытие: Я один из основателей разработчиков TrackJS, поэтому я отлажено много ошибок :)

Смежные вопросы