2016-01-29 7 views
8

C'è qualche tipo di errore javascript che non è gestito da onerror in un'applicazione ember (-cli)? In altri termini, è necessario aggiungere un gestore a window.onerror?Può un trigger di finestra di ember (-cli) window.onerror?

Nei miei test non sono riuscito a trovare alcun errore che non sarebbe stato gestito dall'operatore di Ember. Gli errori di sintassi non hanno superato il processo di generazione di ember-cli.

+1

Si dovrebbe gestire '' window.onerror' Ember.onerror' e 'Ember.RSVP.onerror ' – runspired

+0

Avete qualche dimostrazione o esempio del perché dovrei gestire' window.onerror'? – pogopaule

+0

Non c'è una reale necessità di gestire 'Ember.RSVP.onerror' se si gestisce già' Ember.onerror'. Vedi [il codice] (https://github.com/emberjs/ember.js/blob/v2.2.2/packages/ember-runtime/lib/ext/rsvp.js#L71) – pogopaule

risposta

0

In base alla mia esperienza, non consiglierei di implementare uno window.onerror, a meno che non si abbia una valida ragione per farlo e si sa cosa si potrebbe fare.

Per quanto mi consta, tutti i metodi onerror di Ember sono portati su window.onerror e l'override di esso ha la possibilità di sovrascrivere/disabilitare tutti gli errori nell'app.

Caso in questione, ho avuto un'esperienza recente in cui ho notato che tutti i miei errori js hanno interrotto la registrazione alla console del tutto. Il motivo era che un altro sviluppatore del mio team si era riavviato nel mio index.html per iniettare un tag <script> che utilizzava window.onerror per alcuni script di segnalazione degli errori. Il risultato è stato che l'override di window disabilita letteralmente tutti gli onerror di Ember perché funzionano in modo spumeggiante.

Penso che se si desidera eseguire l'override di window.onerror è necessario assicurarsi che restituisca sempre false in modo che non impedisca la gestione degli errori predefinita nel browser.

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

Mi auguro che aiuta a chiarire in una certa misura.

2

EmberJS fa un ottimo lavoro di contenere gli errori che si verificano all'interno dei suoi confini . Errori causati dal tuo codice Ember dovrebbero essere tutti incanalati nel gestore specifico di Ember.

Tuttavia, il browser JavaScript è una bestia complicata. Qualsiasi errore JavaScript che si verifica all'esterno di di Ember non viene catturato internamente e può essere esposto solo dal numero globale window.onerror. Alcuni esempi di questi potrebbero includere:

  • callback Unbounded in funzioni native come setTimeout e addEventListener
  • non brace JavaScript librerie ed integrazioni, come Stripe, Twitter, o pubblicità
  • script del browser-estensione che può interagire con il DOM in modi imprevedibili.

Per avere un quadro completo di ciò che sta accadendo con i vostri ospiti, probabilmente si dovrebbe allegare sia Ember.onerrorewindow.onerror e inviare i report di nuovo al vostro log. Anche se non stai sviluppando attivamente, le modifiche al browser possono causare la comparsa improvvisa di bug nella tua applicazione. Come this webkit bug that caused ember to throw errors. Esistono buone opzioni per registrare automaticamente gli errori dalle app Ember, come TrackJS.

Disclosure: Io sono uno degli sviluppatori fondatori della TrackJS, così ho il debug un sacco di errori :)