Je voudrais attraper chaque erreur de fonction non définie levée. Existe-t-il une fonction globale de gestion des erreurs en JavaScript? Le cas d'utilisation capture des appels de fonction depuis le flash qui ne sont pas définis.
javascript
dom-events
Brian Tompsett - 汤 莱恩
la source
la source
Réponses:
Cela vous aide-t-il:
Je ne sais pas comment il gère les erreurs Flash ...
Mise à jour: cela ne fonctionne pas dans Opera, mais je pirate Dragonfly en ce moment pour voir ce qu'il obtient. La suggestion de pirater Dragonfly est venue de cette question:
Fenêtre d'imitation. onerror dans Opera en utilisant javascript
la source
window.onerror = function() { alert(42) };
maintenant le code dans la réponse:window.onerror = function() { alert("Error caught"); };
pas remplacé, je ne sais toujours pas ..Comment attraper les erreurs Javascript non gérées
Attribuez l'
window.onerror
événement à un gestionnaire d'événements comme:Comme indiqué dans le code, si la valeur de retour de
window.onerror
esttrue
le navigateur doit supprimer l'affichage d'une boîte de dialogue d'alerte.Quand l'événement window.onerror se déclenche-t-il?
En bref, l'événement est déclenché lorsque 1.) il y a une exception non interceptée ou 2.) une erreur de compilation se produit.
Navigateurs prenant en charge window.onerror
Capture d'écran:
Exemple du code onerror ci-dessus en action après l'avoir ajouté à une page de test:
Exemple de rapport d'erreur AJAX
JSFiddle:
https://jsfiddle.net/nzfvm44d/
Références:
la source
throw
est fait manuellement. stackoverflow.com/questions/15036165/…gestion sophistiquée des erreurs
Si votre gestion des erreurs est très sophistiquée et peut donc déclencher une erreur elle-même, il est utile d'ajouter un indicateur indiquant si vous êtes déjà en "mode de gestion des erreurs". Ainsi:
Sinon, vous pourriez vous retrouver dans une boucle infinie.
la source
handleError
méthode.Essayez Atatus qui fournit un suivi avancé des erreurs et une surveillance réelle des utilisateurs pour les applications Web modernes.
Permettez-moi d'expliquer comment obtenir des traces de pile qui sont raisonnablement complètes dans tous les navigateurs.
Gestion des erreurs en JavaScript
Chrome et Opera modernes prennent entièrement en charge le projet de spécification HTML 5 pour ErrorEvent et
window.onerror
. Dans ces deux navigateurs, vous pouvez soit utiliserwindow.onerror
, soit vous lier correctement à l'événement «erreur»:Malheureusement, Firefox, Safari et IE sont toujours là et nous devons également les prendre en charge. Comme le stacktrace n'est pas disponible dans
window.onerror
nous devons faire un peu plus de travail.Il s'avère que la seule chose que nous pouvons faire pour obtenir des traces de pile à partir d'erreurs est d'envelopper tout notre code dans un
try{ }catch(e){ }
bloc, puis de regardere.stack
. Nous pouvons rendre le processus un peu plus facile avec une fonction appelée wrap qui prend une fonction et renvoie une nouvelle fonction avec une bonne gestion des erreurs.Cela marche. Toute fonction que vous encapsulez manuellement aura une bonne gestion des erreurs, mais il se trouve que nous pouvons le faire automatiquement pour vous dans la plupart des cas.
En modifiant la définition globale de
addEventListener
afin qu'il encapsule automatiquement le rappel, nous pouvons insérer automatiquementtry{ }catch(e){ }
autour de la plupart du code. Cela permet au code existant de continuer à fonctionner, mais ajoute un suivi des exceptions de haute qualité.Nous devons également nous assurer que cela
removeEventListener
continue de fonctionner. Pour le moment, ce ne sera pas le cas car l'argument deaddEventListener
est modifié. Encore une fois, nous devons seulement corriger cela sur l'prototype
objet:Transmettez les données d'erreur à votre backend
Vous pouvez envoyer des données d'erreur à l'aide de la balise d'image comme suit
Avis de non-responsabilité: je suis développeur Web sur https://www.atatus.com/ .
la source
http://yourserver.com
) pour recevoir et stocker. Si vous choisissez atatus.com , vous n'avez rien à faire. Incluez simplement deux lignes de script dans votre page.Il semble que
window.onerror
cela ne donne pas accès à toutes les erreurs possibles. Plus précisément, il ignore:<img>
erreurs de chargement (réponse> = 400).<script>
erreurs de chargement (réponse> = 400).window.onerror
de manière inconnue (jquery, angular, etc.).Voici le début d'un script qui détecte bon nombre de ces erreurs, afin que vous puissiez ajouter un débogage plus robuste à votre application pendant le développement.
Il pourrait être utilisé comme ceci:
Le script complet a une implémentation par défaut qui essaie d'imprimer une version "d'affichage" semi-lisible de l'entité / erreur qu'il reçoit. Peut être utilisé comme source d'inspiration pour un gestionnaire d'erreurs spécifique à l'application. L'implémentation par défaut conserve également une référence aux 100 dernières entités d'erreur, vous pouvez donc les inspecter dans la console Web après qu'elles se produisent, comme:
Remarque: cela fonctionne en remplaçant les méthodes sur plusieurs navigateurs / constructeurs natifs. Cela peut avoir des effets secondaires imprévus. Cependant, il a été utile d'utiliser pendant le développement, pour déterminer où se produisent les erreurs, pour envoyer des journaux à des services comme NewRelic ou Sentry pendant le développement afin que nous puissions mesurer les erreurs pendant le développement, et lors de la mise en scène afin que nous puissions déboguer ce qui se passe à un niveau plus profond. Il peut ensuite être désactivé en production.
J'espère que cela t'aides.
la source
la source
Il faut également conserver le rappel onerror précédemment associé
la source
Si vous voulez un moyen unifié de gérer à la fois les erreurs non capturées et les rejets de promesses non gérés, vous pouvez jeter un œil à la bibliothèque non capturée .
ÉDITER
Il écoute la fenêtre. rejet non géré en plus de window.onerror.
la source
Je recommanderais d' essayer Trackjs .
C'est la journalisation des erreurs en tant que service.
C'est incroyablement simple à installer. Ajoutez simplement une ligne <script> à chaque page et c'est tout. Cela signifie également qu'il sera incroyablement simple à supprimer si vous décidez que vous ne l'aimez pas.
Il existe d'autres services comme Sentry (qui est open-source si vous pouvez héberger votre propre serveur), mais il ne fait pas ce que fait Trackjs. Trackjs enregistre l'interaction de l'utilisateur entre son navigateur et votre serveur Web afin que vous puissiez réellement suivre les étapes de l'utilisateur qui ont conduit à l'erreur, par opposition à simplement une référence de numéro de fichier et de ligne (et peut-être une trace de pile).
la source
Vous écoutez l'événement onerror en affectant une fonction à window.onerror:
la source