2010-03-05 9 views
12

Comment remplacer le gestionnaire d'exceptions global dans javascript pour qu'il devienne le gestionnaire de niveau supérieur pour toutes les exceptions non interceptées?Gestionnaire d'exception global javascript (dans Chrome)

EDIT: window.onerror travail na pas, le code est:

<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> 

Je teste sur le chrome, par la manière. La console du développeur enregistre l'exception non interceptée, mais alert() dans window.onerror n'apparaît pas.

Répondre

14

Google Chrome ne prend pas en charge window.onerror, apparemment il n'est pas implémenté dans webkit.

Mise à jour: maintenant aussi prend en charge le window.onerror. (J'ai la version 25 commentaires impliquent également des versions antérieures)

Ce que j'ai fait était d'envelopper JQuery en utilisant curring pour créer un proxy qui fait toujours un try...catch dans les fonctions JQuery. Je l'utilise dans www.js-analytics.com, cependant la solution ne tient que pour les scripts JQuery.

+0

C'est vrai. Et WebKit a récemment fait quelques progrès sur la correction de ce bug. Ce n'est pas encore réglé, mais ici vous avez le lien pour les mises à jour: https://bugs.webkit.org/show_bug.cgi?id=8519 –

+0

Selon http://groups.google.com/group/js-test- driver/browse_thread/thread/14c7e6d615a2b803? pli = 1 il devrait être corrigé dans Chrome 10 – Korny

+3

J'utilise Chrome 14 (la dernière version) et window.onerror fonctionne! – Nick

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

window.onerror Vous ne savez pas si c'est disponible sur tous les navigateurs.

+0

Ce n'est pas le cas, notamment sur Safari, mais c'est un très bon début. –

+1

Les dernières versions de Safari (et Chrome) le supportent. Pour référence, j'ai confirmé sur Safari 5.1 et Chrome 14, tous deux sous Mac OS X. Je ne sais pas quand ils ont finalement été ajoutés à ces navigateurs, mais il est maintenant disponible sur tous les principaux navigateurs. – Nick

Questions connexes