Hace ya un tiempo vimos un sistema para gestionar los errores javascript que nos podemos encontrar en nuestra aplicación, para ello nos complicábamos con el uso de Ajax para hacer llegar el error al servidor.
Existen sistemas más sencillos como este que ví en una presentación de Nicholas C. Zakas:
function log(code, str){
var img = new Image();
img.src = log.php?code=' + encodeURIComponent(code) + '&str=' + encodeURIComponent(str);
}
// Uso
log(1,"Esto es un error");
Como podemos ver el sistema es sencillo y muy cómodo de implementar en nuestras aplicaciones.
Gestionando errores en nuestras aplicación
Las aplicaciones Javascript tienden a delegar la gestión de errores al navegador, lo que se traduce en mensajes de notificación y elementos que dejan de funcionar para el usuario.
Un concepto que debemos tener en cuenta es que somos los encargados de hacer saber al usuario que algo ha fallado y que acciones debe realizar para solventar el problema.
Ciclo de vida de un error
Como vemos en la imagen, de abajo a arriba nos encontramos el ciclo de vida desde que se ejecuta un error hasta que llega al navegador. Partiendo de esta imagen podemos definir una serie de acciones para controlar el error.
try…catch()
El primer nivel para controlar el error nos lo encontramos en nuestro código, ahí es donde definimos una escapatoria a un código que pueda dar error.
try {
....
} catch(ex){
// X == tu código de error
// ex.message == Mensaje de error devuelto por catch()
log(X, ex.message); // Guardamos el log() en el servidor
}
window.onerror
En este punto nuestro código ya ha quedado atrás, y el navegador pasa a ejecutar el evento onerror
de window
. Como el resto de eventos del DOM podemos redefinir la funcionalidad del mismo y controlar un poco más el error producido.
window.onerror = function (msg, url, line){
log(X, msg);
return true; // Evitamos llegar al navegador
}
Conclusión
Estas herramientas únicamente nos deben proporcionar una solución a la gestión de errores de nuestras aplicaciones, con ellas podemos ofrecer al usuario alternativas cuando un error interrumpa el normal funcionamiento de nuestra aplicación y además registramos dichos errores para su evaluación posterior con el fin de solventarlos.