web-dev-qa-db-fra.com

Le journal affiche l'objet Error: {"isTrusted": true} au lieu des données d'erreur réelles

J'ai un gestionnaire d'événements qui ressemble à ceci:

window.addEventListener('error', function (e) {

    SendLogErrorToServer('Error: ' + e.message +
                         'Error object: ' + JSON.stringify(e) +
                         'Script: ' + e.filename +
                         'Line: ' + e.lineno +
                         'Col: ' + e.colno +
                         'Nav: ' + window.navigator.userAgent));

}, false);

Le problème est que ce que je reçois ressemble à ceci:

Error: Script error.Error object: {"isTrusted":true} Script: Line: 0 Col: 0 Nav: Mozilla/5.0

Comme vous pouvez le constater, aucun numéro de ligne ou message d'erreur utile. Que dois-je changer pour obtenir le numéro de ligne et les détails de l'erreur?

15
frenchie

Vous devez être conscient de deux points dans ce cas. Les deux points sont indépendants l'un de l'autre et doivent être corrigés pour résoudre votre problème.

Premier

L’erreur que vous rencontrez est un type spécial d’erreurs appelé Script Error

«Erreur de script» correspond à ce que les navigateurs envoient au rappel onerror lorsqu’un L'erreur provient d'un fichier JavaScript desservi par une autre origine (domaine, port ou protocole différent). C’est douloureux parce que même bien qu’une erreur se produise, vous ne savez pas quelle est l’erreur, ni de quel code il provient.

Ce n’est pas un bug JavaScript

Les navigateurs cachent intentionnellement les erreurs provenant de fichiers de script d'origines différentes pour des raisons de sécurité les raisons. C’est pour éviter tout risque de fuite involontaire dans un script informations sensibles à un rappel onerror qu’il ne contrôle pas . Pour cette raison, les navigateurs ne donnent que window.onerror un aperçu des erreurs provenant du même domaine. Tout ce que nous savons, c'est que c'est une erreur eu lieu - rien d'autre!

Pour résoudre ce problème: 

Pour corriger et obtenir un objet d'erreur normal, Check this blog post

Seconde

Lorsque vous essayez de chaîner un objet Error, le résultat ne sera pas du tout satisfaisant car vous perdrez presque toutes les données.

La raison de cela

JSON.stringify traite uniquement des propriétés énumérables mais l'objet Error stocke les données contextuelles dans des propriétés innombrables.

Pour résoudre ce problème 

Il y a plusieurs solutions mais celle-ci pourrait être simple

JSON.stringify(err, ["message", "arguments", "type", "name"])

Cela sélectionne les propriétés souhaitées et génère la chaîne pour vous.

21
Mouneer

"Erreur de script" signifie probablement que le problème provient d'une tentative d'exécution d'un script à partir d'un domaine externe.

Vous ne disposez pas d'informations sur le numéro de ligne et le détail des erreurs car elles ne figurent pas sur votre page.

Il est assez largement couvert dans les réponses à cette question .

1
user7363719