En javascript, prenez le calltack qui entraîne une erreur

Le problème est de ne pas recevoir le calltack en général, ce qui peut être fait comme décrit ici: http://eriwen.com/javascript/js-stack-trace/ mais plutôt pour accéder à la table d'appel qui a déclenché l'événement, du gestionnaire du un événement.

En particulier, je m'intéresse à enregistrer la calltack à partir de l'événement d'erreur de fenêtre

window.onerror = function(msg, url, line) { //callstack // would be nice to have. //log callstack or whatever. (note this can be done w/ ajax and service, and is not the question at hand. } 

Mais je sais comment enregistrer l'erreur. (J'utilise .ajax 's .ajax et un service)

Les navigateurs feront-ils cela possible? Est-ce actuellement possible? Peut-être que je pars de la mauvaise façon. Comment puis-je ajouter une fonction simple (c'est-à-dire ne pas modifier toutes les fonctions de ma base de code) pour détecter chaque fois qu'il y a une erreur, et aussi enregistrer la pile d'appels.

Merci pour les réponses jusqu'à présent et désolé si la question était initialement mal rédigée.

L'objet Error a une propriété de pile non standard sur Mozilla, il semble fonctionner aussi sur Google Chrome, et non IE9.

 function test() { try {//can't think of anything that causes an exception? throw new Error("boo"); } catch(e) { alert(e.stack); } } test();​ 

Voir le violon: http://jsfiddle.net/Cq5RJ/

Cela dépend beaucoup de ce que vous voulez faire avec le calltack – c'est-à-dire ce que vous entendez par «journal calltack ou autre».

Pour des raisons de sécurité, il est évidemment très peu probable que les navigateurs soient en train de permettre à une page de donner une instruction javascript pour écrire un fichier arbitraire sur le disque dur de la machine locale.

Quelques possibilités que vous pourriez employer:

  1. Créez le calltack en javascript et envoyez-le comme un message d'erreur détaillé à un gestionnaire AJAX sur le serveur où vous pouvez enregistrer des erreurs dans un fichier journal. (Cela suppose que vous avez au moins un certain accès cgi sur le serveur)

  2. Ecrivez le callstack sur la console javascript en utilisant console.log (), en supposant que le navigateur en question le supporte. (Assurez-vous de tester l'existence de la console et de console.log avant d'écrire.)

  3. Écrivez le calltack dans une division cachée que vous pouvez modifier pour être visible à l'aide des outils de développement du navigateur.

  4. Imprimez le calltack dans une alerte (). (Ceci est potentiellement utile en tant que développeur, mais il serait très intrusif pour un utilisateur final, donc vous ne voudrez pas laisser l'alerte dans le code déployé final.)