Me gustaría detectar cada error de función indefinido arrojado. ¿Existe una facilidad de manejo de errores global en JavaScript? El caso de uso es capturar llamadas de función desde flash que no están definidas.
javascript
dom-events
Brian Tompsett - 汤 莱恩
fuente
fuente
Respuestas:
¿Esto te ayuda a:
Sin embargo, no estoy seguro de cómo maneja los errores de Flash ...
Actualización: no funciona en Opera, pero estoy pirateando Dragonfly en este momento para ver qué obtiene. La sugerencia sobre la piratería de Dragonfly provino de esta pregunta:
Mimic Window. onerror en Opera usando javascript
fuente
window.onerror = function() { alert(42) };
ahora el código en la respuesta:window.onerror = function() { alert("Error caught"); };
no anulado, todavía no estoy seguro ..Cómo detectar errores de Javascript no controlados
Asigne el
window.onerror
evento a un controlador de eventos como:Como se comentó en el código, si el valor de retorno de
window.onerror
estrue
entonces el navegador debería suprimir la visualización de un cuadro de diálogo de alerta.¿Cuándo se activa el evento window.onerror?
En pocas palabras, el evento se genera cuando 1.) hay una excepción no detectada o 2.) se produce un error de tiempo de compilación.
Navegadores compatibles con window.onerror
Captura de pantalla:
Ejemplo del código onerror anterior en acción después de agregar esto a una página de prueba:
Ejemplo de informe de errores AJAX
JSFiddle:
https://jsfiddle.net/nzfvm44d/
Referencias
fuente
throw
se hace manualmente. stackoverflow.com/questions/15036165/…manejo sofisticado de errores
Si su manejo de errores es muy sofisticado y, por lo tanto, puede arrojar un error en sí mismo, es útil agregar un indicador que indique si ya está en "errorHandling-Mode". Al igual que:
De lo contrario, podría encontrarse en un bucle infinito.
fuente
handleError
método.Pruebe Atatus, que proporciona seguimiento avanzado de errores y monitoreo de usuarios reales para aplicaciones web modernas.
Permítanme explicar cómo obtener stacktraces que estén razonablemente completos en todos los navegadores.
Manejo de errores en JavaScript
Modern Chrome y Opera son totalmente compatibles con las especificaciones de borrador HTML 5 para ErrorEvent y
window.onerror
. En ambos navegadores, puede usarwindow.onerror
o enlazar correctamente al evento 'error':Lamentablemente, Firefox, Safari e IE todavía existen y tenemos que apoyarlos también. Como el stacktrace no está disponible
window.onerror
, tenemos que trabajar un poco más.Resulta que lo único que podemos hacer para obtener stacktraces de los errores es envolver todo nuestro código en un
try{ }catch(e){ }
bloque y luego mirarloe.stack
. Podemos hacer el proceso algo más fácil con una función llamada wrap que toma una función y devuelve una nueva función con un buen manejo de errores.Esto funciona. Cualquier función que ajuste manualmente tendrá un buen manejo de errores, pero resulta que en realidad podemos hacerlo automáticamente en la mayoría de los casos.
Al cambiar la definición global de
addEventListener
para que envuelva automáticamente la devolución de llamada, podemos insertar automáticamentetry{ }catch(e){ }
alrededor de la mayoría del código. Esto permite que el código existente continúe funcionando, pero agrega un seguimiento de excepciones de alta calidad.También debemos asegurarnos de que
removeEventListener
siga funcionando. Por el momento no lo hará porque el argumento deaddEventListener
ha cambiado. De nuevo, solo tenemos que arreglar esto en elprototype
objeto:Transmita datos de error a su backend
Puede enviar datos de error utilizando la etiqueta de imagen de la siguiente manera
Descargo de responsabilidad: soy desarrollador web en https://www.atatus.com/ .
fuente
http://yourserver.com
) para recibir y almacenar. Si elige atatus.com , no necesita hacer nada. Solo incluye dos líneas de script en tu página.Parece que
window.onerror
no proporciona acceso a todos los errores posibles. Específicamente ignora:<img>
errores de carga (respuesta> = 400).<script>
errores de carga (respuesta> = 400).window.onerror
de manera desconocida (jquery, angular, etc.).Aquí está el comienzo de un script que detecta muchos de estos errores, para que pueda agregar una depuración más sólida a su aplicación durante el desarrollo.
Se podría usar así:
El script completo tiene una implementación predeterminada que intenta imprimir una versión de "visualización" semi legible de la entidad / error que recibe. Se puede usar como inspiración para un controlador de errores específico de la aplicación. La implementación predeterminada también mantiene una referencia a las últimas 100 entidades de error, por lo que puede inspeccionarlas en la consola web después de que ocurran como:
Nota: Esto funciona anulando métodos en varios navegadores / constructores nativos. Esto puede tener efectos secundarios no deseados. Sin embargo, ha sido útil usar durante el desarrollo, para descubrir dónde se producen los errores, para enviar registros a servicios como NewRelic o Sentry durante el desarrollo para que podamos medir los errores durante el desarrollo y en la puesta en escena para que podamos depurar lo que está sucediendo en Un nivel más profundo. Luego se puede apagar en producción.
Espero que esto ayude.
fuente
fuente
También se debe preservar la devolución de llamada onerror previamente asociada
fuente
Si desea una forma unificada de manejar tanto los errores no detectados como los rechazos de promesas no controlados, puede echar un vistazo a la biblioteca no capturada .
EDITAR
Escucha ventana. rechazo no controlado además de window.onerror.
fuente
Recomendaría probar Trackjs .
Es un error al iniciar sesión como un servicio.
Es increíblemente simple de configurar. Simplemente agregue una línea <script> a cada página y listo. Esto también significa que será increíblemente fácil de eliminar si decides que no te gusta.
Hay otros servicios como Sentry (que es de código abierto si puede alojar su propio servidor), pero no hace lo que hace Trackjs. Trackjs registra la interacción del usuario entre su navegador y su servidor web para que pueda rastrear los pasos del usuario que condujeron al error, en lugar de solo una referencia de archivo y número de línea (y tal vez el seguimiento de la pila).
fuente
Escuchas el evento onerror asignando una función a window.onerror:
fuente