Si utilizamos bastante Javascript en nuestras páginas, seguramente nos habremos encontrado en más de una ocasión con algún que otro error, aún después de haber probado nuestro código más de mil veces.
A medida que aumenta el número de líneas de código también aumenta la probabilidad de que aparezcan este tipo de errores.
Por esta y otras razónes es necesario disponer de alguna forma de gestionar los errores en Javascript. En este artículo vamos a comentar un par de ellas.
La primera opción. El evento onerror
La primera opción para gestionar los errores consiste en utilizar el evento onerror del objeto window de Javascript.
El evento onerror se lanza siempre que se produce un error (cualquiera que sea) en el código Javascript. Para utilizarlo sólo tenemos que crear una función que maneje los errores y que será llamada cada vez que se produzca uno. Esta función recibe tres parámetros:
- El mensaje de error.
- La url de la página que ha causado el error.
- La línea donde se ha producido el error.
La función deberá devolver además el valor true o false. Si devuelve false, el navegador mostrará el mensaje estándar de error y si devuelve true no se mostrará ningún mensaje.
Se puede definir el manejador del evento onerror de la siguiente forma:
<script language="JavaScript"> window.onerror= manejador; function manejador(msj,url,linea) { var texto="Se ha producido el siguiente error:\n"; texto+= msj + "\n"; texto+="(URL: " + url + ". Línea " + linea + ")"; alert(texto); return true; } </script>
Sin embargo, lo más probable es que no nos interese que el usuario se entere de que se han producido errores en la página. Es más,. lo más interesante sería, no sólo que el usuario final no se enterase de que se ha producido un error, si no que nosotros mismos pudieramos recibir la información de esos errores y llevar un registro (o log) de los mismos. Para ello podemos utilizar una llamada Ajax en nuestro manejador de errores que lleve a cabo dicha función.
El código quedaría más o menos de la siguiente forma:
<script language="JavaScript"> var ajax = (XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP'); //Objeto Ajax window.onerror= manejador; function manejador(msj,url,linea) { ajax.open("GET", "mi_URL_que_loga_errores.php?error"+msj+"&linea="+linea, true); //Enviamos el error return true; } </script>
La segunda opción. Bloques try…catch
A los que ya hayan programado alguna vez en Java o C# les será familiar esta segunda opción y en Javascript se utiliza exactamente de la misma manera.
Colocaremos los fragmentos de código que pueden producir errores dentro de un bloque try y, en este caso, el manejador del error se encontrará dentro de bloque catch que le sigue.
Aquí tenéis un ejemplo de utilización:
<script language="JavaScript"> try { miFuncionQueNoExiste(miParametroQueTampocoExiste); //Esto genera un error porque la función no existe } catch(err) { alert("Se ha producidor un error:" + err.description); } </script>
Si no queremos que el usuario se entere de que se ha producido un error pero queremos obtener información sobre los errores que se produzcan, podemos seguir los pasos del ejemplo anterior y utilizar una llamada Ajax dentro del bloque catch que nos envíe los datos del error.