JavaScript global d'erreur de manipulation
Je voudrais rencontrer à chaque pas défini la fonction d'erreur renvoyé. Est-il une erreur globale des installations de manutention en JavaScript? Le cas d'utilisation est d'attraper les appels de la fonction de flash qui ne sont pas définis.
- Que voulez-vous faire avec une erreur une fois que vous l'attraper? Avez-vous juste besoin d'ouvrir de sorte que vous pouvez créer la fonction manquant, ou vous êtes à la recherche pour arrêter les exceptions de la rupture de votre code?
- Je voudrais connaître le nom de la fonction manquant appelé et basées sur la présence d'une chaîne de caractères appeler mon propre fonction. L'appel d'une fonction avec la chaîne de 'fermer' appellerais mon close() par exemple. Je tiens également à intercepter l'erreur à ce point.
- exceptionsjs.com offre cette fonctionnalité et peut être taylored à seulement intercepter les erreurs liées à la non défini fonctionnalité avec sa "garde" de la fonctionnalité.
Vous devez vous connecter pour publier un commentaire.
Est-ce à vous aider à:
Je ne suis pas sûr de savoir comment il gère le Flash erreurs si...
Mise à jour: il ne fonctionne pas à l'Opéra, mais je suis piratage Libellule droit maintenant, pour voir ce qu'il devient. Des suggestions à propos du piratage Libellule est venu de cette question:
Imiter La Fenêtre. onerror à l'Opéra, à l'aide de javascript
Comment Attraper non Gérée Erreurs Javascript
Affecter la
window.onerror
événement à un gestionnaire d'événements comme:Comme commenté dans le code, si la valeur de retour de
window.onerror
esttrue
ensuite, le navigateur devrait supprimer montrant une boîte de dialogue d'alerte.Quand la fenêtre.Événement onerror Feu?
En un mot, 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 appui de fenêtre.onerror
Capture d'écran:
Exemple de la onerror code ci-dessus dans l'action après l'ajout de ce à une page de test:
JSFiddle:
https://jsfiddle.net/nzfvm44d/
Références:
throw
est faite manuellement. stackoverflow.com/questions/15036165/...error instanceof SyntaxError
. Voir MDN instanceof docs et MDN SyntaxError. Pas sûr de ce que les plus âgés prise en charge du navigateur est pour cela, mais MDN indique, il est pris en charge à travers le conseil d'administration.sophistiqué de gestion des erreurs
Si votre erreur de manipulation est très sophistiqué et, par conséquent, pourrait jeter une erreur elle-même, il est utile d'ajouter un drapeau indiquant si vous êtes déjà dans "errorHandling-Mode". Comme:
Sinon, vous pourriez vous retrouver dans une boucle infinie.
handleError
méthode.Essayer Atatus qui offre des fonctions Avancées de l'Erreur de Suivi et de Surveillance de l'Utilisateur Réel pour les applications web modernes.
Laissez-moi vous expliquer comment obtenir stacktraces qui sont raisonnablement complète dans tous les navigateurs.
De la gestion d'erreurs JavaScript
Moderne Chrome et Opera entièrement en charge le HTML 5 projet de spécification pour ErrorEvent et
window.onerror
. Dans deux de ces navigateurs, vous pouvez soit utiliserwindow.onerror
, ou se lier à la "erreur" événement correctement:Malheureusement, Firefox, Safari et IE sont encore là, et nous devons les soutenir aussi. Comme le stacktrace n'est pas disponible dans
window.onerror
que nous avons à faire un peu plus de travail.Il s'avère que la seule chose que nous pouvons faire pour obtenir stacktraces d'erreurs consiste à envelopper l'ensemble de notre code dans un
try{ }catch(e){ }
bloc et puis regardeze.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 fonctionne. Toute fonction que vous enrouler manuellement aura une bonne gestion des erreurs, mais il s'avère que nous pouvons le faire pour vous, automatiquement, dans la plupart des cas.
Par la modification de la définition globale de
addEventListener
de sorte qu'il s'ajuste automatiquement la fonction de rappel, nous pouvons insérer automatiquementtry{ }catch(e){ }
autour de la plupart des code. Cela permet à du code existant continuer à travailler, mais ajoute de haute qualité exception de suivi.Nous avons également besoin de s'assurer que
removeEventListener
continue à travailler. Pour le moment, il ne sera pas parce que l'argument deaddEventListener
est changé. De nouveau nous avons seulement besoin de résoudre ce problème sur leprototype
objet:Transmettre des données d'erreur de votre backend
Vous pouvez envoyer des données d'erreur à l'aide de balise d'image comme suit
Disclaimer: je suis un développeur web à https://www.atatus.com/.
http://yourserver.com
) à recevoir et à stocker. Si vous choisissez atatus.com, vous n'avez pas besoin de faire quoi que ce soit. Il suffit d'inclure deux lignes de script dans votre page.Il semble que
window.onerror
ne donnent pas accès à toutes les erreurs possibles. Plus précisément, il ignore:<img>
les erreurs de chargement (réponse >= 400).<script>
les erreurs de chargement (réponse >= 400).window.onerror
dans une manière inconnue (jquery, angular, etc.).C'est là le début d'un script qui attire un grand nombre de ces erreurs, de sorte que vous pouvez ajouter plus robuste le débogage de votre application en cours de développement.
Il peut être utilisé comme ceci:
Le scénario complet a un défaut de mise en œuvre qui tente d'imprimer un semi-lisible "affichage" de la version de l'entité ou de l'erreur qu'il reçoit. Peut être utilisé pour trouver l'inspiration pour une application spécifique gestionnaire d'erreur. L'implémentation par défaut de conserve également une référence à la dernière 100 erreur entités, de sorte que vous pouvez les contrôler dans la console web, après qu'ils se produisent comme:
Remarque: Cela fonctionne en remplacement des méthodes sur plusieurs navigateur/native des constructeurs. Cela peut avoir des effets secondaires imprévus. Toutefois, il a été utile d'utiliser au cours du développement, de comprendre d'où des erreurs sont survenues, à envoyer des journaux à des services comme l'NewRelic ou Sentinelle au cours du développement afin que nous puissions mesurer les erreurs en cours de développement, et sur la mise en scène afin que nous puissions debug de ce qui se passe à un niveau plus profond. Il peut alors être désactivée lors de la production.
Espère que cette aide.
L'on doit préserver l'associé précédemment onerror de rappel ainsi
Je voudrais vous recommandons de donner Trackjs un essai.
C'est la journalisation des erreurs en tant que service.
Il est étonnamment simple à mettre en place. Il suffit d'ajouter un <script> la ligne à chaque page et c'est tout. Cela signifie aussi qu'il sera étonnamment simple à enlever si vous décidez que vous ne l'aimez pas.
Il y a d'autres services comme Sentry (qui est open-source si vous pouvez héberger votre propre serveur), mais il ne fait pas ce que Trackjs n'. Trackjs dossiers de l'utilisateur de l'interaction entre leur navigateur et de votre serveur web afin que vous pouvez réellement retracer les étapes de l'utilisateur qui a conduit à l'erreur, plutôt que de simplement un fichier et le numéro de ligne de référence (et peut-être la trace de la pile).
Si vous voulez méthode unifiée pour gérer à la fois les erreurs non interceptées et non gérée promesse de refus, vous pouvez avoir un coup d'oeil sur non interceptée bibliothèque.
MODIFIER
Il est à l'écoute de la fenêtre.unhandledrejection en plus de la fenêtre.onerror.
Vous écoutez l'événement onerror par l'affectation d'une fonction à la fenêtre.onerror: