2009-07-08 25 views
6

Estoy desarrollando una aplicación DHTML/Javascript que se basa en algunas características avanzadas (manipulación DOM, AJAX, comunicación Flash y más). Estoy muy preocupado por la funcionalidad: si ocurren problemas, incluso después de implementar la aplicación, quiero asegurarme de que sé por qué y cómo solucionarlos, y también, quiero asegurarme de que el usuario pueda continuar usando la aplicación, posiblemente con funcionalidad reducida si la excepción fue severa.Robusto manejo de excepciones Javascript

Actualmente tengo un sistema de registro y manejo de excepciones creado mediante el cual las funciones pueden generar registros, y si se detecta una excepción, todos los registros se me envían por correo electrónico. El sistema funciona bien, pero me gustaría hacerlo más robusto. Estoy buscando sugerencias.

Una idea que tengo es envolver el cuerpo de cada función javascript en un bloque try/catch y al capturar una excepción, registrar el nombre de la función y luego lanzar el error al controlador global. Pero eso es un montón de código solo para rastrear la función en la que ocurrió la excepción.

¿Alguna idea para hacer que las excepciones de tiempo de ejecución sean más fáciles de encontrar y reproducir?

Respuesta

4

En lugar de tratar con la adición de bloques de captura/N tratar de N funciones, podría ser más fácil de utilizar el evento window.onerror.

Kit de JavaScript tiene a series of examples que puede usar. Especialmente el 3rd:

window.onerror = function (msg, url, line) { 
    alert('Error message: ' + msg + '\nURL: ' + url + '\nLine Number: ' + line); 
    return true; 
} 

Si prefiere un seguimiento de pila, debes revisar Eric Wendelin's (o Luke Smith's update). Es uno de los pocos que conozco que intenta trabajar en todos los navegadores.

+1

Ya estoy capturando todas las excepciones con mi manejador de excepción gloabl, y también usando su seguimiento de pila ... el problema es que en IE (donde ocurren la mayoría de los errores) el seguimiento es solo una larga lista de "funciones anónimas" y realmente no me da ninguna pista sobre dónde ocurrió realmente la excepción ... – Josh

+0

Nadie más respondió esto ... así que supongo que tu respuesta es la mejor ... :-) – Josh

+0

@Josh - Creo 'ventana .onerror' podría no detectar errores en los controladores de eventos jQuery - http://stackoverflow.com/questions/205688/javascript-exception-handling – ripper234