156 votes

Récupération de toutes les exceptions non gérées en javascript

J'essaie de trouver ou de comprendre un moyen d'afficher dans une boîte d'alerte toutes les exceptions javascript non gérées dans une application. Je voudrais que tout cela soit fait du côté client, sans utiliser de code côté serveur. J'utilise MVC3 comme environnement.

J'ai fait des recherches ces derniers jours et je n'ai pas trouvé exactement ce que je cherchais.

J'ai trouvé deux méthodes ci-dessous qui semblent correspondre à ce que je recherche, sauf que ces méthodes sont configurées de telle sorte que vous devez passer un nom de fonction dans une méthode personnalisée pour imprimer la trace de la pile de toutes les exceptions non gérées dans cette fonction spécifique. Je cherche un moyen de ne pas avoir à transmettre manuellement un nom de fonction à une méthode personnalisée qui imprime la trace de la pile de toutes les exceptions non gérées. Je voudrais que cette méthode personnalisée se contente d'écouter toutes les exceptions non gérées dans l'ensemble de l'application.

http://eriwen.com/javascript/js-stack-trace/

Egalement quelque chose de similaire au lien précédent :

https://github.com/eriwen/javascript-stacktrace

Voici le code de base du 2ème lien ci-dessus qui imprime la trace de la pile d'une fonction javascript spécifiée :

instrumentFunction: function (context, functionName, callback) {
    context = context || window;
    var original = context[functionName];
    context[functionName] = function instrumented() {
        callback.call(this, printStackTrace().slice(4));
        return context[functionName]._instrumented.apply(this, arguments);
    };
    context[functionName]._instrumented = original;
}

function printStackTrace(options) {
    options = options || {
        guess: true
    };
    var ex = options.e || null,
        guess = !! options.guess;
    var p = new printStackTrace.implementation(),
        result = p.run(ex);
    return (guess) ? p.guessAnonymousFunctions(result) : result;
}

Donc, pour résumer, connaissez-vous tous un moyen d'avoir une sorte d'"écouteur" pour écouter toutes les exceptions non gérées en javascript et les imprimer à l'écran dans une boîte d'alerte ?

Merci. Jason

160voto

Nish Points 708

Vous pouvez le faire en utilisant la méthode window.onerror.

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {
    alert("Error occured: " + errorMsg);//or any message
    return false;
}

70voto

Javier Perez Points 551

En plus de

window.onerror = function (message, file, line, col, error) {
   alert("Error occurred: " + error.message);
   return false;
};
window.addEventListener("error", function (e) {
   alert("Error occurred: " + e.error.message);
   return false;
})

Vous pouvez également attraper toutes les erreurs déclenchées dans un appel de promesse ( .then() ) à l'écoute de unhandledrejection événement

window.addEventListener('unhandledrejection', function (e) {
  alert("Error occurred: " + e.reason.message);
})

63voto

Fizer Khan Points 4128

Vous pouvez soit utiliser window.onerror ou (étonnamment !) se lier correctement à l'événement "erreur" :

window.onerror = function (message, file, line, col, error) {
   alert("Error occurred: " + error.message);
   return false;
};
window.addEventListener("error", function (e) {
   alert("Error occurred: " + e.error.message);
   return false;
})

Si vous voulez suivre les erreurs JavaScript, vous pouvez essayer de Atatus . Je travaille chez Atatus.

0voto

thatidiotguy Points 3213

Si vous disposez d'outils de développement Web tels que ceux intégrés dans Chrome ou Firebug dans Firefox, les erreurs Javascript sont déjà enregistrées dans la console de débogage. Est-ce que c'est ce que vous recherchez ?

-6voto

Robert Bolton Points 137

Vérifiez http://log4javascript.org il est basé sur Log4J. Si la plupart de votre code est enveloppé dans des instructions try/catch pour gérer les exceptions, vous pouvez utiliser cette bibliothèque comme une interface commune pour envoyer la sortie vers une "boîte de dialogue" toujours disponible ou une fenêtre de journalisation que votre utilisateur final pourrait voir. Vous pourriez même avoir un bouton qui exécute un window.print() pour imprimer le contenu de la boîte de dialogue sur l'imprimante ou le PDF. Bonne chance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X