2010-03-05 6 views
12

Wie überschreibe ich den globalen Ausnahme-Handler in JavaScript, damit es der oberste Handler für alle nicht abgefangenen Ausnahmen wird?Globaler JavaScript-Ausnahme-Handler (in Chrome)

EDIT: window.onerror funktionierte nicht, Code:

<HTML> 
<HEAD> 
<script language='javascript'> 
    window.onerror = function (em, url, ln) { 
     alert(em + ", " + url + ", " + ln); 
     return false; 
    } 

    function fGo() { 
     try 
     { 
      var a = b; // error here : b not defined 
     } 
     catch (e) 
     { 
      throw e; 
     } 
    } 
</script> 
</HEAD> 
<BODY> 
    <button onclick='fGo()'>GO</button> 
</BODY> 
</HTML> 

ich auf Chrom bin Tests, nebenbei bemerkt. Die Entwicklerkonsole registriert die nicht abgefangene Ausnahme, aber der alert() in window.onerror wird nicht angezeigt.

Antwort

14

Google Chrome unterstützt window.onerror nicht, offensichtlich ist es nicht in Webkit implementiert.

Update: Jetzt unterstützt auch Chrome die window.onerror. (Ich habe Kommentare der Version 25 implizieren auch frühere Versionen)

Was ich getan habe, war JUQuery mit Curring umschließen, um einen Proxy zu erstellen, der immer eine try...catch in den JQuery-Funktionen tut.

Ich benutze es in www.js-analytics.com, aber die Lösung gilt nur für JQuery-Skripte.

+0

Das stimmt. Und WebKit hat kürzlich einige Fortschritte bei der Behebung dieses Fehlers gemacht. Es ist noch nicht behoben, aber hier haben Sie den Link für Updates: https://bugs.webkit.org/show_bug.cgi?id=8519 –

+0

Nach http://groups.google.com/group/js-test- driver/browse_thread/thread/14c7e6d615a2b803? pli = 1 sollte in Chrome 10 behoben werden – Korny

+3

Ich benutze Chrome 14 (die neueste Version) und window.onerror funktioniert! – Nick

3
window.onerror = function(errorMsg, url, lineNumber) { 
    // code to run when error has occured on page 
} 
0

Vielleicht suchen Sie nach window.onerror Nicht sicher, ob dies in allen Browsern verfügbar ist.

+0

Es ist nicht, vor allem auf Safari, aber es ist ein wirklich guter Anfang. –

+1

Neueste Versionen von Safari (und Chrome) unterstützen dies. Als Referenz habe ich auf Safari 5.1 und Chrome 14, beide in Mac OS X, bestätigt. Ich bin mir nicht sicher, wann sie endlich zu diesen Browsern hinzugefügt wurden, aber jetzt ist es in allen gängigen Browsern verfügbar. – Nick