2008-12-04 12 views
31

Estoy buscando para registrar excepciones javascript no controladas. ¿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!¿Activa Javascript un evento para excepciones no controladas/no detectadas?

Actualización: tvanfosson señaló onerror como una posibilidad. No forma parte de una especificación y solo está disponible en navegadores basados ​​en IE o Gecko.

Para 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=iBCtOQs0aH_EAzSbWlGa9v5flyo#PPA387,M1

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

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

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

Respuesta

8

Trate de 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 que lo haría con un bloque try/catch. Tenga en cuenta que sin duda hay diferencias entre los navegadores en cuanto a cómo se maneja esto.

+0

Gracias - eso parece funcionar bien –

+6

Aquí hay una advertencia estándar contra el uso de w3schools.com como referencia. Vea http://www.w3fools.com para más información. – L0j1k

+5

@ L0j1k Normalmente no lo uso ahora como recurso, pero es interesante que incluso w3fools.com haya reconocido que ha mejorado. "W3Schools todavía tiene problemas, pero al menos han funcionado en la principal preocupación que tenían los desarrolladores. Para muchos principiantes, W3Schools ha estructurado tutoriales y campos de juego que ofrecen una experiencia de aprendizaje decente. Sin embargo, sería un error continuar su educación sin aprender de más. fuentes confiables, de modo que cuando esté listo para subir de nivel, siga adelante ". – tvanfosson

32

Control hacia fuera 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 se quita el "retorno true"/" evt.preventDefault() " líneas, luego de registrar el error, se imprimirá en la consola JS de la forma habitual.

  • Contrariamente a las declaraciones anteriores, 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.

Cuestiones relacionadas