2010-02-24 2 views
1

[Mise à jour. Je dois être plus précis, je vois ...] Voir l'exemple suivant en javascript:L'erreur n'est pas détectée par la fonction jquery start()

<html> 
    <head> 
    <script> 
     window.onerror = function() { 
     alert('error'); // this one works 
     try {i.dont.exist += 0;} 
     catch(e) { 
      // do some stacktrace stuff, this does not trigger 
      alert(e.stack); 
     } 
     }; 
    </script> 
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script> 
    <script> 
     $(document).ready(function() { 
     foo[1]++; 
     }); 
    </script> 
    </head> 
<body> 
    <p>Hello world.</p> 
</body> 
</html> 

Le 2. alerte ne se déclenche pas. Pourquoi? Si je remplace "foo [1] ++" par "ceci est une ligne bidon" tout fonctionne et les deux alertes sont déclenchées. Y a-t-il un problème d'erreur d'exécution?

Répondre

1

L'alerte n'est pas déclenchée car votre fonction de gestionnaire d'erreur n'a pas été définie avec succès, en raison de votre erreur Javascript :-) Ce bloc de code ne peut pas être analysé correctement, il n'est donc pas exécuté.

Set it up de cette façon:

<script> 
    $(function() { 
    window.onerror = function() { 
     // ... 
    }; 
    }); 
</script> 

Si elle est dans son propre balise de script, il sera OK. Maintenant, vous pouvez reconsidérer le retard de la définition de votre gestionnaire d'erreurs à la gestion des événements "prêt", car vous pouvez avoir des erreurs avant que ce point soit atteint.

[modifier] OK ici est un exemple complet, et il fonctionne très bien pour moi:

<html> 
    <head> 
    <script> 
     window.onerror = function() { 
     alert("OH NO THERE HAS BEEN AN ERROR!"); 
     }; 
    </script> 
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script> 
    <script> 
     $(function() { 
      here is some bogus stuff that will cause Javascript parse errors. 
     }); 
    </script> 
    </head> 
    <body> 
    <p>Hello world.</p> 
    </body> 
</html> 
+0

ok, je me suis déplacé le gestionnaire onerror à sa propre balise de script. Il ne change pas le comportement, qu'une erreur à l'intérieur de la fonction prête ne déclenche pas la "pile" ... – 2ni

+0

vérifier ma mise à jour à la réponse – Pointy

+0

thx pour votre exemple complet. Cela fonctionne pour moi aussi, mais ce n'est pas le but. J'ai mis à jour mon exemple ne fonctionnant pas ci-dessus. – 2ni

Questions connexes