Sentry-javascript: Les anciens navigateurs entraînent la journalisation de [object Event]

Créé le 3 août 2015  ·  50Commentaires  ·  Source: getsentry/sentry-javascript

Tout comme décrit dans ce fil sur Stack Overflow , certains événements envoyés à window.onerror entraîneront la journalisation de [object Event] en tant que message et pas grand-chose d'autre. Ce serait bien si Sentry pouvait détecter ces anciens objets Event et en extraire quelques détails afin que ce qui est enregistré dans Sentry soit quelque chose d'intelligible sur lequel nous pouvons agir et tenter de réparer.

Commentaire le plus utile

@rollokb - des nouvelles à ce sujet ?

Tous les 50 commentaires

Un exemple particulier de nos journaux affiche les informations suivantes :

  • Navigateur : Dolphin 3.0
  • Appareil : Samsung GT-S8600
  • Système d'exploitation : Bada 2.0

Je peux vérifier que le navigateur Android d'Android 4.1 à 4.4, apparemment à partir de téléphones Android tiers (par exemple, Samsung, HTC) est également affecté par ce problème. Je ne peux pas confirmer si les téléphones Nexus sont concernés.

Ce serait une excellente fonctionnalité à obtenir, et cela ne semble pas relativement difficile à mettre en œuvre. Peut-être une vérification rapide si message.toString() == '[object Event]' puis une boucle for-in pour accéder aux propriétés de l'objet événement. Ce serait formidable pour aider à déboguer les problèmes avec un site sous Android 4.1 - 4.4.

@d10 - J'ai expérimenté cela, mais je ne trouve pas de vrai navigateur pour vérifier que cela fonctionne. J'ai essayé d'émuler Android 4.1 - 4.4 sur BrowserStack et d'utiliser le navigateur Android stock, mais ils signalent très bien les erreurs.

Ce serait une excellente fonctionnalité ! Nous avons les mêmes problèmes avec les anciens navigateurs !

Cela me rendait fou alors j'ai écrit un patch pour ça https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling

Je vais le tester un peu en production avant de soumettre une pull request.

@rollokb - ce commit a fière allure. Faites-moi savoir comment ça se passe en production; Je serais heureux de le fusionner dans master par la suite.

Super! Ça me rend dingue aussi ! +1

Semble bien fonctionner en production.

Éditer:

Semble bien fonctionner, mais uniquement avec les événements que j'ai moi-même déclenchés. Toujours absolument aucune information sur le contenu de l'événement.

Semble bien fonctionner, mais uniquement avec les événements que j'ai moi-même déclenchés. Toujours absolument aucune information sur le contenu de l'événement.

Le problème est probablement ici :

+        for (var property in event) {
+            if (event.hasOwnProperty(property)) {
+                options.extra[property] = event[property];
+            }
+         }

En cochant hasOwnProperty , vous n'obtiendrez aucune propriété dérivée de Event.prototype . À moins que ces navigateurs concernés ne fassent comme vous dans votre test - en plaçant des propriétés directement sur l'objet Event qu'ils créent - nous ne verrons aucune donnée.

Le revers de la médaille est que si vous supprimez cette vérification, nous allons obtenir un tas de propriétés qui n'ont rien à voir avec l'erreur. Mais ça vaut peut-être le coup de voir à quoi ça ressemble.

Tu as probablement raison. J'ai été surpris par cela lors des tests avec PhantomJS.

Mise à jour de la branche
https://github.com/rollokb/raven-js/blob/feat/old-webkit-Event-handling/src/raven.js#L1109 -L1121

Cool. Encore une fois, j'apprécie que vous approfondissiez cela.

Un peu hors sujet, mais comment PhantomJS est-il chargé sur ce projet ? Il semble ne pas gérer correctement les propriétés d'événement (c'est-à-dire qu'il considère tous les accessoires d'événement comme les siens).

Via kmiyashiro/grunt-moka

https://github.com/getsentry/raven-js/blob/master/Gruntfile.js#L193

Il semble ne pas gérer correctement les propriétés d'événement (c'est-à-dire qu'il considère tous les accessoires d'événement comme les siens).

Vous pouvez essayer de vous moquer d'un objet Event qui se comporte de la même manière que celui observé dans Chrome/un autre navigateur. (J'espère que les navigateurs hérités qui envoient ces objets se sentent de la même manière.)

Vous pouvez également essayer d'obtenir les tests pour exécuter Phantom2 pour voir si le comportement est plus précis. Je crois qu'ils exécutent 1.9.8 en ce moment.

@rollokb - des nouvelles à ce sujet ?

J'en ai reçu des centaines aujourd'hui à partir du navigateur Facebook v80 sur Android 4. Ce n'est pas vraiment vieux, n'est-ce pas ?

Nous obtenons beaucoup de ces erreurs sur Android 4.x avec le navigateur Android

J'en ai reçu des centaines aujourd'hui à partir du navigateur Facebook v80 sur Android 4. Ce n'est pas vraiment vieux, n'est-ce pas ?

Je suis à peu près sûr que "Facebook Browser" n'est que l'emballage de Facebook, quel que soit le navigateur Web interne.

Fondamentalement, cette erreur n'apparaît que dans un tas de versions internationales de téléphones Android. Jetez un œil à votre liste d'appareils lorsque vous voyez de telles erreurs, vous remarquerez qu'ils ont des codes d'appareil comme Samsung GT-S8600 - qui ne sont pas des modèles nord-américains/occidentaux.

Ils semblent utiliser un fork d'un navigateur qui prétend être "Chrome Mobile" ou "Navigateur Android" (les agents utilisateurs sont facilement falsifiés), mais semble avoir une signature d'objet Error différente. J'ai eu du mal à reproduire l'erreur (y compris en essayant d'acheter certains de ces téléphones pour une utilisation au bureau), mais je vais probablement essayer de nouveau très bientôt.

Nous n'obtenons pas ces erreurs sur les navigateurs rares, nous venons de les avoir sur Windows 10 avec Chrome 51.0.2704

Salut les gars!

J'ai aussi le rapport Raven

...
"exception": {
  "values": [
    {
      "value": "[object Event]",
      "stacktrace": {
        "frames": [
          ...
        ]
      }
    }
  ]
}

dans le navigateur mobile sur Android. L'agent utilisateur est
Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; GT-N7100 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

+1 pour ça

Ainsi, depuis la version 3.7.0, nous générons désormais des traces synthétiques pour [object Event] et d'autres objets non-Error interceptés. Je vous recommande d'essayer 3.7.0 et de voir les résultats que vous obtenez.

@benvinegar J'ai installé 3.7.0, mais j'obtiens cette erreur

J'utilise le hack suivant comme solution temporaire :

    Raven.install();

    if (Raven._processException) {
        const oldProcessException = Raven._processException;

        Raven._processException = function (event, message) {
            if (message && typeof message === 'object') {
                // detect that it's an event
                if (String(message) === '[object Event]') {
                    // message
                    message = stringifyEvent(message);

                    // type
                    event = event || 'event';
                } else {
                    // stringify the other objects
                    try {
                        message = JSON.stringify(message);
                    } catch (e) {
                        //
                    }
                }

                arguments[0] = event;
                arguments[1] = message;
            }

            return oldProcessException.apply(this, arguments);
        };
    }

    function stringifyEvent (event) {
        const data = {
            eventPhase: event.eventPhase,
            type: event.type,
            isTrusted: event.isTrusted,
            returnValue: event.returnValue,
            timeStamp: event.timeStamp
        };

        if (event.target) {
            data.target = {
                src: event.target.src,
                tagName: event.target.tagName || 'UNKNOWN_HTMLELEMENT',
                className: event.target.className,
                readyState: event.target.readyState
            };
        }

        if (event.path) {
            data.path = event.path.map((el) => {
                const tagName = el.tagName || 'UNKNOWN_HTMLELEMENT';
                const className = (el.className || '').replace(/\s+/, '');

                // DIV.class-1.class-2
                return `${ tagName }.${ className }`;
            });
        }

        return JSON.stringify(data);
     }

@webschik Ressemble à une faute de frappe dans cette ligne :

return `${ tagName }.${ className }`;

Et êtes-vous sûr que cette construction est autorisée :

data.path = event.path.map((el) => {

UP : Obtenir l'erreur "Jeton inattendu =>" avec ce correctif

@webschik

2016-09-23 12 45 43

@AlexanderMatveev , c'est la syntaxe ES2015.
Vous pouvez le remplacer

@webschik Ajouté ce hack et semble que rien n'a changé, obtenant toujours juste l'erreur "[object Event]".

@AlexanderMatveev , c'est bizarre, car cela fonctionne pour mon projet. Nous avons probablement besoin de plus d'enquêtes là-bas

@webschik

Voici l'ordre des scripts :

<script type="text/javascript" src="[raven.min.js version 3.7.0]"></script>
<script>
    Raven.config('https://[...]@sentry.io/[...]', {
        release: '[...]'
    }).install();
</script>
<script type="text/javascript" src="[fix.js without first Raven.install() line]"></script>

@benvinegar J'ai installé 3.7.0, mais j'obtiens cette erreur

Vous l'obtiendriez quand même. La différence est qu'il doit générer une trace de pile synthétique. Cependant, s'il est intercepté parce qu'il bouillonne jusqu'à window.onerror, la trace de la pile peut ne pas être utile (mais elle vous dira que c'est ainsi qu'elle est interceptée).

Avait la même chose avec Raven 3.6.1 sur Sentry hébergé pour UA : Mozilla/5.0 (Linux; U; Android 3.1; en-gb; GT-P7500 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13

J'ai également plusieurs événements, la plupart d'entre eux sont à partir d'un navigateur Android ou Facebook. Même Facebook 95.0, qui devrait être récent, déclenche cette erreur. Android 4. . est le système d'exploitation principal et de nombreux appareils sur lesquels il est signalé sont Samsung-GT [quelque chose]. J'utilise la version 3.7.0.

Nous avons également obtenu cela d'un agent utilisateur super générique, sans périphériques spéciaux :

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36

Corbeau 3.9.0

se produit toujours sur 3.9.1 quelques centaines de fois par jour, sur facebook et android browser.name
aucune trace de pile que ce soit.

devrions-nous simplement l'ignorer?

Pareil ici.

Comme tout le monde ici. Si ces informations vous aident :

image

UC : Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I8190L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/87.0.0.17.79;]

Navigateur : Facebook 87.0.0

pareil ici, une solution ?? :S

j'ai le même problème

image

J'ai actuellement le même problème... il y a beaucoup de ces erreurs et j'atteins très bientôt le seuil de sentinelle 😞

Je rencontre des dizaines de ces problèmes, tous avec Chrome 45 sur Windows 10.

Cela se produit toujours sur raven 3.15.0, sur le navigateur facebook et android
Doit-on simplement l'ignorer ?

Quelqu'un a trouvé une solution ? Dans mon cas apparaît ceci en sentinelle:

`[événement d'objet]

à trimHeadFrames(./node_modules/raven-js/src/raven.js:562:1)
à _logDebug(./node_modules/raven-js/src/raven.js:488:1)
à G._promiseRejectionHandler(./node_modules/raven-js/src/raven.js:430:1)`

unhandledPromiseRejection : vrai

Agent utilisateur : Mozilla/5.0 (Linux ; U ; Android 6.0.1 ; en-US ; vivo 1610 Build/MMB29M) AppleWebKit/537.36 (KHTML, comme Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.8.1112 Mobile Safari /537.36

Famille d'appareils : vivo 1610
Modèle d'appareil : 1610
Marque de l'appareil : vivo

Android 6.0.1

Navigateur UC 12.5.8

La version de mon client raven-js est : 3.25.0

J'ai joint une capture d'écran de l'erreur (se produit plusieurs fois avec de nombreux anciens navigateurs)
raven-screenshot

Cela peut être corrigé dans le nouveau SDK à l'aide d'indicateurs d'événement et d'une gestion des erreurs personnalisée.

@kamilogorek

Cela peut être corrigé dans le nouveau SDK à l'aide d'indicateurs d'événement et d'une gestion des erreurs personnalisée.

Pouvez-vous élaborer cela? Des liens vers des documents ?
Au moins de quelle version avons-nous besoin ?
Je préfère avoir un extrait de code de ces paramètres "indices d'événement" et "gestion des erreurs personnalisées" pour ce problème.

Merci!

@hiroshi , veuillez consulter https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326
C'est une fonctionnalité du nouveau SDK sentry-javascript, qui a été publié en tant que RC Today. Il ne sera pas reporté vers raven-js/node.

Bonjour, je continue à voir une erreur comme celle-ci dans Sentry :

exception | Error: [object Event]

Il n'y a aucune trace de pile attachée et aucune information utile. À partir des sessions LogRocket, il semble que l'utilisateur ne rencontre aucun problème. Je vois des demandes bloquées sur Facebook et Google Tag Manager, donc je soupçonne qu'ils ont installé une extension de blocage.
C'est une erreur récurrente d'une personne utilisant Chrome 75, pas un très vieux navigateur.
Des suggestions pour résoudre ce problème ?

Merci

Remarque : @sentry/navigateur version 5.3.0

La mise à jour de @burtyish vers la dernière version est la première bonne étape. Nous avons introduit _beaucoup_ de changements concernant ce comportement dans la version 5.7.0

@kamilogorek Merci !
Je vois une erreur beaucoup plus informative maintenant que j'ai mis à niveau vers sentry.javascript.browser v5.12.1.
Et j'ai aussi une trace de pile!

@burtyish génial! :)

Cette page vous a été utile?
0 / 5 - 0 notes