2010-06-22 16 views
6

Creo un mensaje de error que funciona con IE y Mozila. No funciona con Safari, Chrome y Opera.window.onerror en Safari (Javascript)

Pero tengo que usarlo. Por favor, dame la forma correcta de hacerlo.

<script language="javascript" type="text/javascript"> 
window.onerror = function(msg, url, line) 
{ 
    document.write("Message\t = "+msg + "<br/>Location\t = " + url + "<br/>Line No.\t = " + line + "<br/>Error No.\t = " + this.err.number); 
} 
this.err = Error(12,"My Own Error"); 
throw this.err; 
</script> 

========================================== 
Internet Explorer: 

My Error 
Message = My Own Error 
Location = http://localhost/practice/JavaScript/window.errors.php 
Line No. = 8 
Error No. = 12 
================================================ 
Mozilla FireFox: 

My Error 
Message = Script error. 
Location = My Own Error 
Line No. = 0 
Error No. = undefined 
===================================================== 
Safari, Chrome, Opera: 

My Error 

mira el código que Mozilla da la información incorrecta. ¿lo que hago?

+2

* (Referencia) * http://www.quirksmode.org/dom/events/error.html El evento es muy mal soportado en IE y FF; no estoy seguro de si hay algo que se pueda hacer al respecto. –

Respuesta

5

Opera no es compatible con window.onerror en absoluto. Chrome lo admite, pero no en los errores que arrojes tú mismo. Esto también es cierto para Internet Explorer cuando se usan objetos de Error que no sean Error(), p. TypeError(). Chrome tampoco proporciona los argumentos línea y .

Debe ponerse correctamente las excepciones que vas a tirar con una declaración try...catch, en lugar de depender de window.onerror.

+7

El punto es detectar excepciones/errores que NO va a lanzar, pero que es probable que sucedan en un JS suficientemente complejo (por ejemplo, para mostrar un buen mensaje de disculpa al usuario). Estoy viendo el mismo problema yo mismo, y Chrome/Safari no detecta errores de referencia no válidos, que sin duda son los más frecuentes. – sereda

+0

@sereda: entonces me temo que no tienes suerte, a menos que quieras envolver cada bloque de código con try y catch statements (por favor no :-)). La solución, por supuesto, es escribir código libre de errores y probar tanto como sea humanamente posible. –

+4

@AndyE Solo puede escribir como código libre de errores como lo permiten las bibliotecas de terceros. Por ejemplo, terminé aquí porque tengo que usar la biblioteca Javascript Javascript, y la excepción que están lanzando ni siquiera es detectable a través de try/catch porque se desencadena desde un diálogo que controlan. –

Cuestiones relacionadas