47 votes

Obtenez l'objet d'erreur Javascript actuel avec window.onerror.

Javascript a ce super rappel window.onerror . C'est assez pratique pour suivre n'importe quelle erreur. Cependant, il appelle avec le nom de l'erreur, le nom du fichier et la ligne. Ce n'est certainement pas aussi riche que d'obtenir l'objet d'erreur réel à partir d'un objet try...catch déclaration. L'objet d'erreur réel contient beaucoup plus de données, donc j'essaie de l'obtenir. Malheureusement, try...catch ne fonctionnent pas correctement lorsque vous commencez à avoir du code asynchrone.

Existe-t-il un moyen de combiner et d'obtenir le meilleur des deux mondes ? J'ai d'abord cherché un moyen d'obtenir le último déclenchée dans le cadre d'une onerror mais il semble que JS ne le stocke pas.

Un indice ?

48voto

Archaeron Points 239

Ceci est maintenant possible dans certains navigateurs. Le site spec a été mis à jour pour inclure l'erreur réelle avec stacktrace comme 5ème paramètre.

le problème est que tous les navigateurs ne le supportent pas encore, vous pourriez donc faire quelque chose comme ceci :

window.onerror = function(message, filename, lineno, colno, error)
{
    if(error != null)
    {
        //handle the error with stacktrace in error.stack
    }
    else
    {
        //sadly only 'message', 'filename' and 'lineno' work here
    }
};

10voto

Mrchief Points 25418

Si vous faites référence à la trace de la pile de l'objet d'erreur, alors, à ma connaissance, ce n'est pas possible.

Pour la simple raison qu'une trace de pile est liée à un contexte d'exécution dans lequel des exceptions d'exécution (gérées avec try...catch...finally) ont été créées ou lancées (avec new Error() o throw ).

Considérant que lorsque window.onerror est invoquée, elle est appelée dans un contexte différent.

Vous pouvez faire un peu de kilométrage en inspectant window.event (non disponible sur FF) dans votre onerror manipulateur.

7voto

Fizer Khan Points 4128

Les navigateurs modernes prennent entièrement en charge le projet de spécification HTML 5 pour les éléments suivants ErrorEvent y window.onerror . Dans ces deux navigateurs, vous pouvez soit utiliser window.onerror, soit (étonnamment !) vous lier correctement à l'événement "error" :

// Only Chrome & Opera pass the error object.
window.onerror = function (message, file, line, col, error) {
    console.log(message, "from", error.stack);
};
// Only Chrome & Opera have an error attribute on the event.
window.addEventListener("error", function (e) {
    console.log(e.error.message, "from", e.error.stack);
});

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