2011-09-21 8 views
8

Tengo un poco de JavaScript (Jquery Tools' Overlay) que puede arrojar una excepción cuando se coloca en una página que lo usa incorrectamente, y trato de manejarlo correctamente.Captura un error de javascript en un archivo de script externo

Tengo un controlador window.onerror general para rescatar estos errores y reportarlos al servidor, sin embargo, eso no se desencadena.

Tampoco puedo ajustar un try/catch alrededor de este código, ya que se está incluyendo como un script remoto en HTML.

¿Alguna idea sobre cómo puede rescatar los errores que arroja una secuencia de comandos externa?

ACTUALIZACIÓN: Aquí está el ejemplo. Debo corregirme, window.onerror se activa, sin embargo, la secuencia de comandos no continúa ejecutándose (en el ejemplo, la alerta nunca alerta).

<html> 
<script type="text/javascript"> 
window.onerror = function(e){ console.log("caught error: "+e); return true;} 
</script> 
<body> 

<!-- this is the line in the dom that causes the script to throw --> 
<a rel="nofollow"></a> 

<script type="text/javascript" src="http://www.google.com/jsapi"></script> 
<script type="text/javascript">google.load("jquery", "1.4.1");</script> 
<script src="http://cdn.jquerytools.org/1.2.5/tiny/jquery.tools.min.js"></script> 

<script type="text/javascript"> 
//this code will throw an error in jquery tools 
$("a[rel]").overlay(); 

alert("it's ok, I still ran."); 
</script> 

</body> 

</html> 
+0

IS es arrojado su 'window.onerror' definido antes de que el error? Si no, no funcionará. –

Respuesta

5

Defina el manejador de errores antes de cargar o ejecutar cualquier otra secuencia de comandos.

<script>window.onerror = function(e){}</script> 
<script src="external.js"></script> 
<script> 
function ole(){alert("Hi!")} 
ole(); 
</script> 

Cuando el script contiene un error de sintaxis, el gestor de errores no se llamará sin embargo:

<script>window.onerror=function(e){alert("?")} 
<script> 
[email protected] //The error won't be caught. 
</script> 
+0

Gracias, acabo de actualizar la pregunta. En realidad está activando onerror, sin embargo, el flujo de control también se detiene, en lugar de continuar. –

+0

Eso es lo esperado. El error es arrojado por '$' y no es capturado por ningún controlador local de errores. Cuando se produce un error, ya no se ejecuta ningún código después de esa línea (el código definido en el alcance global, en este caso). –

+0

Mejor hack de JavaScript del año x) hiciste mi día –

Cuestiones relacionadas