2010-06-22 16 views
6

Tworzę komunikat o błędzie, że pracuje z IE i Mozilą. Nie woking z Safari, Chrome i Operą.window.onerror w Safari (Javascript)

Ale muszę go użyć. Proszę, daj mi właściwy sposób na zrobienie tego.

<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 

Sprawdź kod Mozilla podać złe informacje. co robię?

+2

* (Referencja) * http://www.quirksmode.org/dom/events/error.html wydarzenie jest rzeczywiście bardzo źle obsługiwane w IE i FF; nie wiem, czy można coś z tym zrobić. –

Odpowiedz

5

Opera w ogóle nie obsługuje funkcji window.onerror. Chrome to obsługuje, ale nie błędów, które sam sobie rzucasz. Dotyczy to również Internet Explorera, gdy używane są obiekty błędu inne niż Error(), np. TypeError(). Chrome nie dostarcza również argumentów linii i.

Powinieneś poprawnie wychwycić wszystkie wyjątki, które zamierzasz wyrzucić za pomocą instrukcji try...catch, zamiast polegać na window.onerror.

+7

Chodzi o to, aby wychwycić wyjątki/błędy, których NIE zamierzasz wyrzucić, ale które mogą się zdarzyć w wystarczająco złożonym JS (na przykład, aby pokazać użytkownikowi miły komunikat o przeprosinach). Sam patrzę na ten sam problem, a Chrome i Safari nie przechwytują nieprawidłowych błędów referencyjnych - które są prawdopodobnie najczęstsze. – sereda

+0

@sereda: obawiam się, że nie masz szczęścia, chyba że chcesz zawinąć każdy blok kodu za pomocą instrukcji try i catch (proszę nie :-)). Rozwiązaniem jest oczywiście napisanie kodu wolnego od błędów i przetestowanie go tak, jak to tylko możliwe. –

+4

@AndyE Możesz pisać tylko jako wolny od błędów kod, tak jak pozwalają ci biblioteki innych firm. Na przykład znalazłem się tutaj, ponieważ muszę korzystać z błędnej biblioteki Facebooka Javascript, a wyjątek, który rzucają, nie jest nawet możliwy do wyłapania przez try/catch, ponieważ wyzwala z kontrolowanego przez siebie okna dialogowego. –

Powiązane problemy