2009-07-08 12 views
6

Je développe une application DHTML/Javascript qui repose sur des fonctionnalités avancées (manipulation DOM, AJAX, communication Flash, etc.). Je suis très préoccupé par la fonctionnalité - si des problèmes surviennent, même après le déploiement de l'application, je veux m'assurer de savoir pourquoi et comment les réparer - et aussi, je veux m'assurer que l'utilisateur est capable de continuer à utiliser l'application, éventuellement avec une fonctionnalité réduite si l'exception était sévère. J'ai actuellement un système de gestion des exceptions et de journalisation construit par lequel les fonctions peuvent générer des journaux, et si une exception est détectée, tous les journaux sont envoyés par e-mail à moi. Le système fonctionne bien mais je voudrais le rendre plus robuste. Je cherche des suggestions. Une idée que je ai est d'enrouler le corps de chaque fonction javascript dans un bloc try/catch et à attraper une exception, connectez-vous le nom de la fonction, puis renvoyez l'erreur au gestionnaire global. Mais c'est beaucoup de code juste pour traquer la fonction dans laquelle l'exception s'est produite.Robuste gestion des exceptions Javascript

Des idées pour rendre les exceptions d'exécution plus faciles à trouver et à reproduire?

Répondre

4

Plutôt que de traiter avec l'ajout N try/blocs catch à N fonctions, il pourrait être plus facile d'utiliser l'événement window.onerror.

JavaScript Kit a a series of examples vous pouvez utiliser. Surtout le 3rd:

window.onerror = function (msg, url, line) { 
    alert('Error message: ' + msg + '\nURL: ' + url + '\nLine Number: ' + line); 
    return true; 
} 

Si vous préférez une trace de la pile, vous pourriez vérifier Eric Wendelin's (ou Luke Smith's update). C'est l'un des rares que je connaisse qui tente de travailler avec plusieurs navigateurs.

+1

En fait, j'attrape déjà toutes les exceptions avec mon gestionnaire d'exceptions gloabl, et aussi en utilisant sa trace de pile ... le problème est, dans IE (où la plupart des erreurs se produisent) la trace est juste une longue liste de et ne me donne pas vraiment la moindre idée de l'endroit où l'exception s'est réellement produite ... – Josh

+0

Personne d'autre n'a répondu à cette question ... donc je suppose que votre réponse est la meilleure ... :-) – Josh

+0

@Josh - Je crois 'window' .onerror' peut ne pas détecter les erreurs dans les gestionnaires d'événements jQuery - http://stackoverflow.com/questions/205688/javascript-exception-handling – ripper234