Question

J'utilise un site ASP.NET où j'ai des problèmes pour trouver des erreurs JavaScript uniquement avec des tests manuels.

Existe-t-il une possibilité d’attraper toutes les erreurs JavaScript sur le côté client et de les consigner sur le serveur, c.-à-d. dans le journal des événements (via Webservice ou quelque chose du genre)?

Était-ce utile?

La solution

Vous pouvez essayer de configurer votre propre gestionnaire pour l’ événement onerror et de l'utiliser XMLHttpRequest pour dire au serveur ce qui ne va pas, cependant, comme cela ne fait pas partie d'une spécification, le support est quelque peu feuilleté .

Voici un exemple tiré de Utilisation de XMLHttpRequest pour consigner les erreurs JavaScript :

window.onerror = function(msg, url, line)
{
  var req = new XMLHttpRequest();
  var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
  req.open("POST", "/scripts/logerror.php");
  req.send(params);
};

Autres conseils

Réponse courte: Oui, c'est possible.

Réponse plus longue: Des personnes ont déjà expliqué comment vous pouvez (au moins partiellement) résoudre ce problème en écrivant votre propre code. Cependant, notez qu'il existe des services qui semblent avoir permis de s'assurer que le code JS requis fonctionne dans de nombreux navigateurs. J'ai trouvé ce qui suit:

Je ne peux parler d'aucun de ces services car je ne les ai pas encore essayés.

Je viens d'implémenter une erreur côté serveur lors de la journalisation des erreurs javascript sur un projet au travail. Il existe un mélange de code hérité et de nouveau code utilisant jQuery .

J'utilise une combinaison de window.onerror et encapsule les gestionnaires d'événements jQuery et la fonction onready avec une fonction de gestion des erreurs (voir: Suivi des erreurs JavaScript: pourquoi window.onerror n'est pas suffisant ).

  • window.onerror : intercepte toutes les erreurs dans IE (et la plupart des erreurs dans Firefox), mais ne fait rien dans Safari et Opera.
  • Gestionnaires d'événements jQuery: intercepte les erreurs d'événement jQuery dans tous les navigateurs.
  • Fonction jQuery ready: détecte les erreurs d’initialisation dans tous les navigateurs.

Une fois l'erreur détectée, j'y ajoute des propriétés supplémentaires (URL, navigateur, etc.), puis je la renvoie au serveur à l'aide d'un appel ajax.

Sur le serveur, j'ai une petite page qui ne prend que les arguments postés et les envoie à notre structure de journalisation de serveur normale.

Je voudrais ouvrir le code source pour cela (en tant que plugin jQuery). Si quelqu'un est intéressé, faites-le moi savoir, cela aiderait à convaincre les patrons!

Si vous utilisez Google Analytics, vous pouvez enregistrer les erreurs JavaScript dans les événements Google Analytics.

Voir cette application: http://siteapps.com/app/log_javascript_errors_with_ga-181

J'espère que ça aide.

Je vous recommande également d'utiliser l'utilitaire TraceTool , doté de la prise en charge de JavaScript et très utile pour la surveillance JS.

Si vous souhaitez consigner les erreurs côté client sur le serveur, vous devrez effectuer un traitement quelconque sur le serveur. Le mieux serait d’avoir un service Web auquel vous pouvez accéder via JavaScript (AJAX) et que vous lui transmettez les informations de votre journal d’erreurs.

Ne résout pas le problème à 100% car si le problème concerne le serveur Web hébergeant le service Web qui vous pose problème, vous pouvez également envoyer les informations via une page standard via une chaîne de requête. Une méthode consiste à générer dynamiquement des balises Image (qui sont ensuite supprimées) car le navigateur essaiera de charger la source d'une image. Il contourne bien les appels JavaScript interdomaines. N'oubliez pas que vous avez des problèmes si quelqu'un a désactivé les images;)

J'utilise Appfail récemment pour capturer les erreurs asp.net et JavaScript.

Vous pouvez éventuellement faire un appel Ajax au serveur à partir d'un test / catch, mais c'est probablement ce que vous pouvez faire de mieux.

Puis-je suggérer des tests unitaires JavaScript? Peut-être avec JSUnit ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top