Pregunta

Estoy buscando registrar excepciones de JavaScript no manejadas. ¿Hay un evento que se dispara cuando no se detecta una excepción? Estoy buscando detectar las excepciones antes de que causen errores de JavaScript en el navegador, pero prefiero no ejecutar toda mi aplicación dentro de un try / catch. Cualquier ayuda sería apreciada. Gracias!

Actualización: tvanfosson señaló el error como una posibilidad. No es parte de una especificación y solo está disponible en navegadores basados ??en IE o Gecko.

Para obtener más información: http://books.google.com/books?id=tKszhx-XkzYC&pg=PA386&lpg=PA386&dq=safari+onerror+javascript&source=web&ots=gQaGbpUnjG&sig=aGbpUnjG&sig= iBCtOQs0aH_EAzSbWlGa9v5flyo # PPA387, M1

Tabla de soporte OnError - http://www.quirksmode.org/dom/events/ error.html

Documentación de Mozilla - https://developer.mozilla.org/en/DOM/window .onerror

Informe de errores de WebKit - https://bugs.webkit.org/show_bug.cgi? id = 8519

¿Fue útil?

Solución

Intente usar un controlador onerror. Docs de MDN. Esto le permitirá hacer algo cuando se detecte un error, pero probablemente no le permitirá continuar de una manera elegante como lo haría un bloque try / catch. Tenga en cuenta que, sin duda, hay diferencias entre los navegadores en la forma en que se maneja esto.

Otros consejos

Mira este violín:

http://jsfiddle.net/xYsRA/1/

window.onerror = function (msg, url, line) {
    console.log("Caught[via window.onerror]: '" + msg + "' from " + url + ":" + line);
    return true; // same as preventDefault
};

window.addEventListener('error', function (evt) {
    console.log("Caught[via 'error' event]:  '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
    console.log(evt); // has srcElement / target / etc
    evt.preventDefault();
});


throw new Error("Hewwo world.  I crash you!!!");

throw new Error("Hewwo world.  I can only crash you once... :(");

Que imprime:

Caught[via window.onerror]: 'Uncaught Error: Hewwo world.  I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:21
Caught[via 'error' event]:  'Uncaught Error: Hewwo world.  I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:26
ErrorEvent {lineno: 32, filename: "http://fiddle.jshell.net/xYsRA/1/show/", message: "Uncaught Error: Hewwo world.  I crash you!!!", clipboardData: undefined, cancelBubble: false…}
 fiddle.jshell.net:27\

Notas:

  • Si elimina el " return true " / " evt.preventDefault () " líneas, luego de que se registra el error, se imprimirá en la consola JS de la manera normal.

  • Contrariamente a las declaraciones hechas anteriormente, window.onerror funcionó en todos los navegadores que probé. Sin embargo, el método addEventListener es probablemente mejor de todos modos y proporciona una semántica más rica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top