Je voudrais attraper chaque erreur de fonction indéfinie lancée. Existe-t-il une fonction de traitement des erreurs globales en Javascript ? Le cas d'utilisation est d'attraper les appels de fonction de flash qui ne sont pas définis.
Réponses
Trop de publicités?Comment repérer les erreurs Javascript non gérées ?
Attribuer le window.onerror
à un gestionnaire d'événement comme :
<script type="text/javascript">
window.onerror = function(msg, url, line, col, error) {
// Note that col & error are new to the HTML 5 spec and may not be
// supported in every browser. It worked for me in Chrome.
var extra = !col ? '' : '\ncolumn: ' + col;
extra += !error ? '' : '\nerror: ' + error;
// You can view the information in an alert to see things working like this:
alert("Error: " + msg + "\nurl: " + url + "\nline: " + line + extra);
// TODO: Report this error via ajax so you can keep track
// of what pages have JS issues
var suppressErrorAlert = true;
// If you return true, then error alerts (like in older versions of
// Internet Explorer) will be suppressed.
return suppressErrorAlert;
};
</script>
Comme commenté dans le code, si la valeur de retour de window.onerror
est true
alors le navigateur doit supprimer l'affichage d'une boîte de dialogue d'alerte.
Quand l'événement window.onerror se déclenche-t-il ?
En bref, l'événement est déclenché lorsque 1.) une exception non attrapée se produit ou 2.) une erreur de compilation se produit.
exceptions non prises
- lancez "quelques messages".
- call_something_undefined() ;
- cross_origin_iframe.contentWindow.document ;, une exception de sécurité
erreur de compilation
<script>{</script>
<script>for(;)</script>
<script>"oops</script>
setTimeout("{", 10);
il essaiera de compiler le premier argument en tant que un script
Navigateurs supportant window.onerror
- Chrome 13+.
- Firefox 6.0+.
- Internet Explorer 5.5+.
- Opera 11.60 et plus
- Safari 5.1 et plus
Capture d'écran :
Exemple du code onerror ci-dessus en action après l'avoir ajouté à une page de test :
<script type="text/javascript">
call_something_undefined();
</script>
Références :
- Mozilla Developer Network : : window.onerror
- MSDN : : Gérer et éviter les erreurs des pages Web - Partie 2 : Erreurs d'exécution
- Retour aux sources - Événement JavaScript onerror
- DEV.OPERA : : Meilleure gestion des erreurs avec window.onerror
- Événement onError de la fenêtre
- Utilisation de l'événement onerror pour supprimer les erreurs JavaScript
- SO : : window.onerror ne se déclenche pas dans Firefox
Cela vous aide-t-il ?
<script type="text/javascript">
window.onerror = function() {
alert("Error caught");
};
xxx();
</script>
Je ne suis pas sûr de la façon dont il gère les erreurs de Flash...
Mise à jour : ça ne fonctionne pas dans Opera, mais je suis en train de pirater Dragonfly pour voir ce que ça donne. La suggestion de pirater Dragonfly vient de cette question :
http://stackoverflow.com/questions/645840/mimic-window-onerror-in-opera-using-javascript
Gestion sophistiquée des erreurs
Si votre gestion des erreurs est très sophistiquée et qu'elle risque donc de provoquer elle-même une erreur, il est utile d'ajouter un drapeau indiquant si vous êtes déjà en "errorHandling-Mode". Par exemple :
var appIsHandlingError = false;
window.onerror = function() {
if (!appIsHandlingError) {
appIsHandlingError = true;
handleError();
}
};
function handleError() {
// graceful error handling
// if successful: appIsHandlingError = false;
}
Sinon, vous pourriez vous retrouver dans une boucle infinie.