Sentry-javascript: Navegadores antigos fazem com que [objeto Evento] seja registrado

Criado em 3 ago. 2015  ·  50Comentários  ·  Fonte: getsentry/sentry-javascript

Assim como descrito neste tópico no Stack Overflow , certos eventos enviados para window.onerror farão com que [object Event] seja registrado como a mensagem e não muito mais. Seria legal se o Sentry pudesse detectar esses objetos Event antigos e extrair alguns detalhes deles para que o que é registrado no Sentry seja algo inteligível que possamos agir e tentar consertar.

Comentários muito úteis

@rollokb – alguma notícia sobre isso?

Todos 50 comentários

Uma amostra específica de nossos logs mostra as seguintes informações:

  • Navegador: Dolfin 3.0
  • Dispositivo: Samsung GT-S8600
  • SO: Bada 2.0

Posso verificar se o navegador Android do Android 4.1 a 4.4, aparentemente de telefones Android de terceiros (por exemplo, Samsung, HTC) é afetado de maneira semelhante por esse problema. Não posso confirmar se os telefones Nexus foram afetados.

Esse seria um ótimo recurso para obter e não parece relativamente difícil de implementar. Talvez uma verificação rápida se message.toString() == '[object Event]' e então um loop for-in para acessar as propriedades do objeto de evento. Isso seria ótimo para ajudar a depurar problemas com um site no Android 4.1 - 4.4.

@d10 – Eu experimentei isso, mas não consigo encontrar um navegador real para verificar se funciona. Eu tentei emular o Android 4.1 – 4.4 no BrowserStack e usar o navegador Android padrão, mas eles relatam erros muito bem.

Isso seria um ótimo recurso! Temos os mesmos problemas com navegadores antigos!

Isso estava me deixando louco, então escrevi um patch para este https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling

Vou testá-lo em produção um pouco antes de enviar um pull request.

@rollokb – esse commit parece ótimo. Deixe-me saber como vai na produção; Eu ficaria feliz em mesclá-lo no mestre depois.

Excelente! Está me deixando louco também! +1

Parece estar funcionando bem na produção.

Editar:

Parece estar funcionando bem, mas apenas com eventos que eu mesmo acionei. Ainda não obtendo absolutamente nenhuma informação sobre o conteúdo do Evento.

Parece estar funcionando bem, mas apenas com eventos que eu mesmo acionei. Ainda não obtendo absolutamente nenhuma informação sobre o conteúdo do Evento.

O problema provavelmente está aqui:

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

Ao marcar hasOwnProperty , você não obterá nenhuma propriedade derivada de Event.prototype . A menos que esses navegadores afetados estejam fazendo como você faz em seu teste – colocando propriedades diretamente no objeto Event que eles criam – não veremos nenhum dado.

O outro lado é que, se você remover essa verificação, obteremos várias propriedades que não têm nada a ver com o erro. Mas pode valer a pena ver o que parece.

Você provavelmente está certo. Fui pego por isso ao testar com PhantomJS.

Atualizado o ramo
https://github.com/rollokb/raven-js/blob/feat/old-webkit-Event-handling/src/raven.js#L1109 -L1121

Legal. Mais uma vez, eu aprecio você se aprofundar nisso.

Um pouco fora do tópico, mas como o PhantomJS está sendo carregado neste projeto? Parece tratar as propriedades do evento incorretamente (ou seja, ele vê todas as propriedades do evento como próprias).

Via kmiyashiro/grunt-mocha

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

Parece tratar as propriedades do evento incorretamente (ou seja, ele vê todas as propriedades do evento como próprias).

Você pode tentar zombar de um objeto Event que se comporta da mesma forma que é observado no Chrome/em algum outro navegador. (Esperamos que os navegadores legados que enviam esses objetos sejam semelhantes.)

Você também pode tentar fazer os testes executarem o Phantom2 para ver se o comportamento é mais preciso. Eu acredito que eles rodam 1.9.8 agora.

@rollokb – alguma notícia sobre isso?

Eu tenho centenas deles hoje do Facebook Browser v80 no Android 4. Isso não é muito antigo, é?

Estamos recebendo muitos desses erros no Android 4.x com o navegador Android

Eu tenho centenas deles hoje do Facebook Browser v80 no Android 4. Isso não é muito antigo, é?

Tenho certeza de que "Navegador do Facebook" é apenas o Facebook envolvendo qualquer que seja o navegador da Web interno.

Basicamente, esse erro só aparece em várias versões internacionais de telefones Android. Dê uma olhada na sua lista de dispositivos quando vir esses erros, você notará que eles têm códigos de dispositivos como Samsung GT-S8600 – que não são modelos norte-americanos/ocidentais.

Eles parecem estar usando algum fork de um navegador que pretende ser "Chrome Mobile" ou "Android Browser" (agentes de usuário são facilmente falsificados), mas parece ter uma assinatura de objeto Error diferente. Tive dificuldade em reproduzir o erro (incluindo tentar comprar alguns desses telefones para uso no escritório), mas provavelmente farei outra tentativa em breve.

Não estamos recebendo esses erros em navegadores raros, acabamos de obtê-los no Windows 10 com Chrome 51.0.2704

Oi pessoal!

Também tenho o relatório Raven

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

no navegador móvel no Android. O agente do usuário é
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 para isso

Assim, a partir do 3.7.0, agora geramos rastreamentos sintéticos para [object Event] e outros objetos não-Error capturados. Eu recomendo tentar 3.7.0 e ver quais resultados você obtém.

@benvinegar eu tenho 3.7.0 instalado, mas recebendo este erro

Estou usando o próximo hack como solução temporária:

    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 Parece um erro de digitação nesta linha:

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

E você tem certeza sobre esta construção é permitida:

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

UP: Obtendo o erro "Token inesperado =>" com esta correção

@webschik

2016-09-23 12 45 43

@AlexanderMatveev , é a sintaxe ES2015.
Você pode substituí-lo

@webschik Adicionado este hack e parece que nada mudou, ainda recebendo apenas o erro "[object Event]".

@AlexanderMatveev , é estranho, porque isso funciona para o meu projeto. Provavelmente precisamos de mais investigações lá

@webschik

Aqui está a ordem dos 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 eu tenho 3.7.0 instalado, mas recebendo este erro

Você ainda conseguiria. A diferença é que ele deve gerar um rastreamento de pilha sintético. No entanto, se ele for capturado porque borbulha até window.onerror, o rastreamento de pilha pode não ser útil (mas lhe dirá que é assim que está sendo capturado).

Teve o mesmo com Raven 3.6.1 no Sentry hospedado para 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

Também tenho vários eventos, a maioria deles são de um navegador Android ou Facebook. Até o Facebook 95.0, que deve ser recente, está provocando esse erro. Andróide 4. . é o sistema operacional principal e muitos dos dispositivos em que é relatado são Samsung-GT [algo]. Estou usando a versão 3.7.0.

Também obtivemos isso de um agente de usuário super genérico, sem dispositivos especiais:

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

Corvo 3.9.0

ainda acontece no 3.9.1 algumas centenas de vezes por dia, no facebook e android browser.name
nenhum rastreamento de pilha.

devemos apenas ignorá-lo?

Mesmo aqui.

Igual a todos aqui. Se esta informação ajudar:

image

UE: 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;]

Navegador: Facebook 87.0.0

o mesmo aqui, alguma solução?? :S

tenho o mesmo problema

image

Atualmente estou com o mesmo problema... existem muitos desses erros e estou atingindo o limiar de sentinela muito em breve 😞

Estou recebendo dezenas desses problemas, todos com o Chrome 45 no Windows 10.

Ainda está acontecendo no Raven 3.15.0, no Facebook e no navegador Android
Devemos simplesmente ignorá-lo?

Alguém encontrou uma solução? No meu caso aparece isso na sentinela:

`[objeto Evento]

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

unhandledPromiseRejection: true

Agente de usuário: Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; vivo 1610 Build/MMB29M) AppleWebKit/537.36 (KHTML, como Gecko) Versão/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.8.1112 Mobile Safari /537,36

Família de dispositivos: vivo 1610
Modelo do dispositivo: 1610
Marca do dispositivo: vivo

Android 6.0.1

Navegador UC 12.5.8

Minha versão do cliente raven-js é: 3.25.0

Anexei uma captura de tela do erro (acontece muitas vezes com muitos navegadores antigos)
raven-screenshot

Isso pode ser corrigido no novo SDK usando dicas de eventos e tratamento de erros personalizado.

@kamilogorek

Isso pode ser corrigido no novo SDK usando dicas de eventos e tratamento de erros personalizado.

Você pode elaborar isso? Algum link para o documento?
Pelo menos qual versão precisamos?
Prefiro ter um trecho de código dessas configurações de "dicas de evento" e "tratamento de erro personalizado" para esse problema.

Obrigado!

@hiroshi , consulte https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326
É um recurso do novo SDK sentry-javascript, que foi lançado como RC Today. Ele não será portado de volta para raven-js/node.

Oi, continuo vendo um erro como este no Sentry:

exception | Error: [object Event]

Não há rastreamento de pilha anexado e nenhuma informação útil. Nas sessões do LogRocket, parece que o usuário não apresenta problemas. Eu vejo algumas solicitações bloqueadas para o Facebook e o Google Tag Manager, então suspeito que eles tenham uma extensão de bloqueador instalada.
É um erro recorrente de uma pessoa que usa o Chrome 75, não um navegador muito antigo.
Alguma sugestão de como eu resolveria esse problema?

Obrigado

Nota: @sentry/browser versão 5.3.0

@burtyish atualizar para a versão mais recente é o primeiro bom passo. Introduzimos _muitas_ mudanças em relação a esse comportamento na versão 5.7.0

@kamilogorek Obrigado!
Vejo um erro muito mais informativo agora que atualizei para sentry.javascript.browser v5.12.1.
E eu tenho um rastreamento de pilha também!

@burtyish incrível! :)

Esta página foi útil?
0 / 5 - 0 avaliações