2010-01-08 16 views
5

El onerror page on MSDN indica que el controlador onerror se puede asociar a un elemento de script y que "Se activa cuando se produce un error durante la carga de objetos".Cómo desencadenar script.onerror en Internet Explorer?

Para las pruebas unitarias, estoy intentando hacer que este controlador onerror se dispare, pero no pude encontrar un ejemplo adecuado.

El siguiente código provoca un error en Firefox, pero no hay alerta se muestra en Internet Explorer

<script src="http://www.google.com/NOTFOUND.js" onerror="alert('error fired')"></script> 

¿Alguien sabe un valor para script.src que disparar el controlador asociado script.onerror?

+0

IIRC, algo así como 'src =" 1 "' debería desencadenar un error. – kangax

+0

@kangax: buen intento, pero no, src = "1" solo activa window.onerror, no script.onerror –

+0

que no está realmente relacionado con esta pregunta, pero me di cuenta de que se había comprometido con la propuesta de revisión del código. Su puntaje de rep no se muestra correctamente por alguna razón. Es posible que deba vincular su cuenta o confirmar algunos correos electrónicos para solucionarla. El representante inferior tiene menos impacto en el compromiso de la propuesta, lamentablemente. – greatwolf

Respuesta

8

Me encontraron esta buried in some MSDN documentation:

Tenga en cuenta que la documentación erróneamente dice que esto funciona para los elementos también; el error se solucionará en la documentación del taller para la versión final de Internet Explorer 5 en marzo.

Lo siguiente que pensé que podría ayudar es el onreadystatechange:

<script src="http://www.google.com/NOTFOUND.js" onreadystatechange="alert(this.readyState)"> 

incendios este evento dos veces para mí, una vez con "carga" y de nuevo con "cargado", si el guión es válido o no Otra documentación que he encontrado dice que a veces se dispara un evento completo, y no está claro cuándo se debe disparar. Entonces parece que eso no funcionará.

Así que creo que te queda la solución hacky de comprobar que realmente existe una variable que se supone que declara el script.En HTML:

<script src="http://yourdomain.com/declare_foo.js"></script> 
<script>if (typeof foo == "undefined") {alert ('error loading script');}</script> 

Y luego, por supuesto, en declare_foo.js, tendría

var foo = 'Script loaded successfully'; 
+1

Muy buena captura !! Lamentablemente, no puedo suponer que una variable en particular estará presente en el script, ya que este código se usará en la naturaleza para cargar scripts de terceros dinámicamente. Agregué un comentario a la página onerror en MSDN para señalar el artículo y la nota que encontraste. Gracias Annie. –

+0

@Eric ¿alguna vez encontró una solución para este problema? – Tom

+0

@Tom no, no hay solución. Algunos errores simplemente no se pueden atrapar en JavaScript. –

0

Acabo de leer un poco sobre esto, parece que onerror también se puede adjuntar al objeto ventana. Ve:

http://www.javascriptkit.com/javatutors/error.shtml

De acuerdo con esa página, puede pasar en msg, url y lineNumber argumentos:

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

No está seguro sobre el soporte del navegador para esto, pero gracias por traerlo a mi ¡atención!

Actualización: no hicieron nada en Safari 4 (aparte de registrar un error en Firebug como de costumbre), pero muestra la alerta en Firefox 3.6 Beta de prueba 5. error en http://www.javascriptkit.com/javatutors/errortest2.htm

Actualización 2 : hecho una prueba con lo siguiente:

index.html:

<html> 
<head> 
<script type="text/javascript"> 

window.onerror=function(msg, url, linenumber){ 
alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber) 
return true 
} 
</script> 

<script type="text/javascript" src="js.js"></script> 
</head> 
<body> 
</body> 
</html> 

js.js: (nombre estúpido, lo sé)

document.write('hi there' 

resultado en FF 3.6 Beta 5:

Result

+1

Gracias por el comentario. Debería haber mencionado que sé cómo activar window.onerror handler; aquí estoy específicamente interesado en el script.onerror handler. –

+2

Gracias Adam, pero realmente estoy intentando disparar script.onerror aquí, no window.onerror. Quiero detectar el final (no exitoso) de cargar un script dinámico y establecer el controlador en window.onerror realmente no ayudaría. –

0

¿Qué tal esto?

<script language="JavaScript" type="text/javascript"> 
    var DidItLoad=0; 
    function funcDidItLoad() 
    { 
     if(DidItLoad==1) 
     { 
      alert("good") 
     } 
     else 
     { 
      alert("bad") 
     } 
     DidItLoad=0; 
     return 0; 
    } 
    </script> 
    <script language="JavaScript" type="text/javascript" onload="DidItLoad=1;" src="javascript/myError.js"></script><!--erase me--> 
    <script language="JavaScript" type="text/javascript"> 
     funcDidItLoad(); 
    </script> 
+1

gracias, pero estaba buscando una solución general para usar en una biblioteca JavaScript, no una solución única. –