Quelle est la meilleure technique pour attraper TOUTES les exceptions lancées en JavaScript ?
Évidemment, la meilleure technique est d'utiliser try...catch. Mais avec les callbacks ansynchrones et ainsi de suite, cela peut devenir délicat.
Je sais que les navigateurs IE et Gecko prennent en charge window.onerror, mais qu'en est-il d'Opera et de Safari ?
Voici une série de cas de test pour lesquels j'aimerais avoir une solution centrale de gestion des exceptions :
// ErrorHandler-Test1
var test = null;
test.arg = 5;
// ErrorHandler-Test2
throw (new Error("Hello"));
// ErrorHandler-Test3
throw "Hello again";
// ErrorHandler-Test4
throw {
myMessage: "stuff",
customProperty: 5,
anArray: [1, 2, 3]
};
// ErrorHandler-Test5
try {
var test2 = null;
test2.arg = 5;
} catch(e) {
ErrorHandler.handleError(e);
}
// ErrorHandler-Test6
try {
throw (new Error("Goodbye"));
} catch(e) {
ErrorHandler.handleError(e);
}
// ErrorHandler-Test7
try {
throw "Goodbye again";
} catch(e) {
ErrorHandler.handleError(e);
}
// ErrorHandler-Test8
try {
throw {
myMessage: "stuff",
customProperty: 5,
anArray: [1, 2, 3]
};
} catch(e) {
ErrorHandler.handleError(e);
}
Si vous pensez à d'autres cas de test, veuillez les mentionner. Plusieurs de ces cas mentionnent une méthode ErrorHandler.handleError. Il s'agit simplement d'une directive suggérée lors de l'utilisation de try...catch.
0 votes
Juste parce qu'il est clair que vous n'avez pas remarqué les commentaires sur ma réponse : il semble que vous m'ayez rétrogradé pour "énoncé dans la question" alors que c'est lu comme une question : "mais qu'en est-il d'Opera et Safari ?" J'ai répondu spécifiquement à une question posée ici. WTF ?
1 votes
Dans WebKit,
window.onerror
manquant est un problème depuis 2003 mais on dirait que c'est enfin résolu . Bien sûr, Opera restera obstiné.0 votes
Pour info, window.onerror fonctionne bien dans - Firefox 7.0.1 - IE 8 - Chrome 16 - Opera 11.60
11 votes
Je ne sais pas pourquoi il a été fermé. Voté pour la réouverture.
1 votes
Je suis d'accord, c'est une question utile. La seule chose à laquelle je pense est que CasperOne craignait que cela devienne une sorte de discussion sur la guerre des navigateurs ?
0 votes
Cette affaire a probablement été classée en raison de la façon dont elle a été formulée. Notamment "Qu'est-ce que le meilleur technique pour...". Cela peut être considéré comme une argumentation et la question est donc classée comme non constructive. Essayez de la reformuler sans les modificateurs comme "meilleur". Pourquoi ne pas demander simplement "Comment puis-je attraper toutes les exceptions JS ?".