ember.js - ¿Puede una aplicación Ember(-cli) disparar window.onerror?
error-handling (3)
¿Hay algún tipo de error de javascript que no sea manejado por onerror en una aplicación ember (-cli)? En otros términos, ¿hay alguna necesidad de agregar un controlador a window.onerror ?
En mis pruebas no pude encontrar ningún error que no fuera manejado por Ember''s onerror. Los errores de sintaxis no pasaron el proceso de compilación de ember-cli.
Ember tiene un evento de error incorporado que puedes usar en tus rutas
actions: {
error(error, transition) {
if (error && error.status === 400) {
//handle error
}
}
}
Más información: https://guides.emberjs.com/v2.0.0/routing/loading-and-error-substates/
En mi experiencia, no aconsejaría implementar una window.onerror
, a menos que tenga una buena razón para hacerlo y sepa lo que puede estar haciendo.
Que yo sepa, todos los métodos de onerror
de Ember se onerror
la onerror
de onerror
y anulación, tiene el potencial de anular / deshabilitar todo el error en su aplicación.
Por ejemplo, recientemente tuve una experiencia en la que noté que todos mis errores js dejaron de conectarse a la consola por completo. La razón fue que otro desarrollador de mi equipo había iniciado en mi index.html para insertar una etiqueta <script>
que utilizaba window.onerror
para algún script de informe de error. El resultado fue que esa window
invalidante literalmente inhabilitaba todos los onerror
las onerror
porque funcionan de forma burbujeante.
Creo que si quieres sobrescribir window.onerror
debes asegurarte de que siempre devuelve false
para que no impida el manejo de error predeterminado en el navegador.
Ver: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror
Espero que eso ayude a aclarar hasta cierto punto.
EmberJS hace un excelente trabajo al contener errores que ocurren dentro de sus límites . Los errores causados por su código Ember deberían ser canalizados al manejador específico de Ember.
Sin embargo, el JavaScript del navegador es una bestia complicada. Cualquier error de JavaScript que ocurra fuera de Ember no se capturará internamente y solo podrá ser expuesto por la window.onerror
. Algunos ejemplos de estos podrían incluir:
- Retrollamadas sin límites en funciones nativas como
setTimeout
yaddEventListener
- Bibliotecas e integraciones de JavaScript que no son de color ámbar, como Stripe, Twitter o Advertisements
- Script de extensión de navegador que puede interactuar con DOM de maneras impredecibles.
Para tener una Ember.onerror
completa de lo que está sucediendo con sus visitantes, probablemente debería adjuntar tanto a Ember.onerror
como a window.onerror
y enviar los informes nuevamente a sus registros. Incluso si no está desarrollando activamente, los cambios en el navegador pueden causar errores repentinos en su aplicación. Al igual que este error de webkit que hizo que la brasa arrojara errores . Hay buenas opciones para registrar errores automáticamente desde aplicaciones Ember, como TrackJS .
Divulgación: soy uno de los desarrolladores fundadores de TrackJS, así que he depurado muchos errores :)