Sentry-javascript: Los navegadores antiguos hacen que se registre [objeto Evento]

Creado en 3 ago. 2015  ·  50Comentarios  ·  Fuente: getsentry/sentry-javascript

Tal como se describe en este hilo sobre Stack Overflow , ciertos eventos enviados a window.onerror harán que [object Event] se registre como el mensaje y no mucho más. Sería bueno si Sentry pudiera detectar estos objetos antiguos Event y extraer algunos detalles de ellos para que lo que se registra en Sentry sea algo inteligible sobre lo que podamos actuar e intentar solucionarlo.

Comentario más útil

@rollokb : ¿alguna noticia sobre esto?

Todos 50 comentarios

Una muestra particular de nuestros registros muestra la siguiente información:

  • Navegador: Dolphin 3.0
  • Dispositivo: Samsung GT-S8600
  • Sistema operativo: Bada 2.0

Puedo verificar que el navegador Android de Android 4.1 a 4.4, aparentemente de teléfonos Android de terceros (por ejemplo, Samsung, HTC) se ven afectados de manera similar por este problema. No puedo confirmar si los teléfonos Nexus están afectados.

Esta sería una gran característica para obtener, y no parece relativamente difícil de implementar. Quizás una verificación rápida si message.toString() == '[object Event]' y luego un bucle for-in para acceder a las propiedades del objeto de evento. Esto sería genial para ayudar a depurar problemas con un sitio en Android 4.1 - 4.4.

@ d10 : experimenté con eso, pero no puedo encontrar un navegador real para verificar que funcione. Intenté emular Android 4.1 - 4.4 en BrowserStack y usar el navegador de Android estándar, pero informan errores sin problemas.

¡Esa sería una gran característica! ¡Tenemos los mismos problemas con los navegadores antiguos!

Esto me estaba volviendo loco, así que escribí un parche para esto https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling

Voy a probarlo un poco en producción antes de enviar una solicitud de extracción.

@rollokb : ese compromiso se ve genial. Déjame saber cómo va en producción; Estaría encantado de fusionarlo en el maestro después.

¡Estupendo! ¡A mí también me está volviendo loco! +1

Parece estar funcionando bien en producción.

Editar:

Parece estar funcionando bien, pero solo con eventos que he activado yo mismo. Todavía no obtengo absolutamente ninguna información sobre el contenido del Evento.

Parece estar funcionando bien, pero solo con eventos que he activado yo mismo. Todavía no obtengo absolutamente ninguna información sobre el contenido del Evento.

El problema es probable aquí:

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

Al marcar hasOwnProperty , no obtendrá ninguna propiedad que derive de Event.prototype . A menos que estos navegadores afectados estén haciendo lo que usted hace en su prueba, colocando propiedades directamente en el objeto Event que crean, no veremos ningún dato.

La otra cara de la moneda es que, si elimina esa marca, obtendremos un montón de propiedades que no tienen nada que ver con el error. Pero podría valer la pena ver cómo se ve.

Probablemente tengas razón. Esto me atrapó cuando probé con PhantomJS.

Actualizamos la sucursal
https://github.com/rollokb/raven-js/blob/feat/old-webkit-Event-handling/src/raven.js#L1109 -L1121

Frio. Una vez más, agradezco que indagues en esto.

Ligeramente fuera de tema, pero ¿cómo se carga PhantomJS en este proyecto? Parece que maneja las propiedades de los eventos incorrectamente (es decir, ve todas las propiedades de los eventos como propias).

Vía kmiyashiro/grunt-mocha

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

Parece que maneja las propiedades de los eventos incorrectamente (es decir, ve todas las propiedades de los eventos como propias).

Puede intentar burlarse de un objeto de evento que se comporta de la misma manera que se observa en Chrome/algún otro navegador. (Con suerte, los navegadores heredados que envían estos objetos se sienten de manera similar).

También puede intentar hacer que las pruebas ejecuten Phantom2 para ver si el comportamiento es más preciso. Creo que ejecutan 1.9.8 en este momento.

@rollokb : ¿alguna noticia sobre esto?

Obtuve cientos de ellos hoy desde Facebook Browser v80 en Android 4. Eso no es muy antiguo, ¿verdad?

Estamos recibiendo muchos de estos errores en Android 4.x con el navegador de Android

Obtuve cientos de ellos hoy desde Facebook Browser v80 en Android 4. Eso no es muy antiguo, ¿verdad?

Estoy bastante seguro de que "Facebook Browser" es solo Facebook envolviendo lo que sea el navegador web interno.

Básicamente, este error solo aparece en un montón de versiones internacionales de teléfonos Android. Eche un vistazo a su lista de dispositivos cuando vea tales errores, notará que tienen códigos de dispositivo como Samsung GT-S8600, que no son modelos norteamericanos/occidentales.

Parecen estar usando una bifurcación de un navegador que pretende ser "Chrome Mobile" o "Android Browser" (los agentes de usuario se falsifican fácilmente), pero parece tener una firma de objeto de error diferente. He tenido dificultades para reproducir el error (incluido el intento de comprar algunos de estos teléfonos para usarlos en la oficina), pero probablemente lo intentaré de nuevo pronto.

No recibimos esos errores en navegadores raros, solo lo obtuvimos en Windows 10 con Chrome 51.0.2704

¡Hola tios!

También tengo el informe Raven

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

en el navegador móvil en Android. El agente de usuario es
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 por esto

Entonces, a partir de la versión 3.7.0, ahora generamos seguimientos sintéticos para [object Event] y otros objetos detectados que no son errores. Recomiendo probar 3.7.0 y ver qué resultados obtiene.

@benvinegar Tengo 3.7.0 instalado, pero recibo este error

Estoy usando el siguiente truco como solución temporal:

    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 un error tipográfico en esta línea:

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

¿Y estás seguro de que esta construcción está permitida?

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

ARRIBA: Obteniendo el error "Token inesperado =>" con esta solución

@webschik

2016-09-23 12 45 43

@AlexanderMatveev , es sintaxis ES2015.
puedes reemplazarlo

@webschik Agregó este truco y parece que nada ha cambiado, todavía recibe solo el error "[Evento de objeto]".

@AlexanderMatveev , es raro, porque esto funciona para mi proyecto. Probablemente necesitemos más investigaciones allí.

@webschik

Aquí está el orden de los guiones:

<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 Tengo 3.7.0 instalado, pero recibo este error

Todavía lo conseguirías. La diferencia es que debería generar un seguimiento de pila sintético. Sin embargo, si se detecta porque aparece en window.onerror, el seguimiento de la pila podría no ser útil (pero le diría que así es como se detecta).

Tuve lo mismo con Raven 3.6.1 en Sentry alojado 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

También tengo varios eventos, la mayoría son de un navegador de Android o Facebook. Incluso Facebook 95.0, que debería ser reciente, está provocando este error. androide 4. . es el sistema operativo principal y muchos de los dispositivos en los que se informa son Samsung-GT [algo]. Estoy usando la versión 3.7.0.

También obtuvimos esto de un agente de usuario súper genérico, sin dispositivos especiales:

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

Cuervo 3.9.0

todavía sucede en 3.9.1 unos cientos de veces al día, en facebook y android browser.name
no hay rastro de pila en absoluto.

¿Deberíamos simplemente ignorarlo?

Aquí igual.

Igual que todos aquí. Si esta información ayuda:

image

AU: 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

lo mismo aquí, alguna solución?? :S

tengo el mismo problema

image

Actualmente tengo el mismo problema... hay muchos de estos errores y estoy alcanzando el umbral de centinela muy pronto 😞

Recibo docenas de estos problemas, todos con Chrome 45 en Windows 10.

Todavía está sucediendo en Raven 3.15.0, en el navegador de Facebook y Android
¿Deberíamos simplemente ignorarlo?

¿Alguien encontró una solución? En mi caso aparece esto en centinela:

`[Evento de objeto]

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

UnhandledPromiseRejection: verdadero

Agente de usuario: Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; vivo 1610 Build/MMB29M) AppleWebKit/537.36 (KHTML, como Gecko) Versión/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.8.1112 Mobile Safari /537.36

Familia de dispositivos: vivo 1610
Modelo de dispositivo: 1610
Marca del dispositivo: vivo

Android 6.0.1

Navegador UC 12.5.8

La versión de mi cliente raven-js es: 3.25.0

Adjunté una captura de pantalla del error (sucede muchas veces con muchos navegadores antiguos)
raven-screenshot

Esto se puede arreglar en el nuevo SDK usando sugerencias de eventos y manejo de errores personalizado.

@kamilogorek

Esto se puede arreglar en el nuevo SDK usando sugerencias de eventos y manejo de errores personalizado.

¿Puedes elaborar esto? ¿Algún enlace al documento?
¿Al menos qué versión necesitamos?
Prefiero tener un fragmento de código de esas configuraciones de "sugerencias de eventos" y "manejo de errores personalizado" para este problema.

¡Gracias!

@hiroshi , consulte https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326
Es una función del nuevo SDK de sentry-javascript, que se ha lanzado como RC Today. No se volverá a portar a raven-js/node.

Hola, sigo viendo un error como este en Sentry:

exception | Error: [object Event]

No hay seguimiento de pila adjunto ni información útil. De las sesiones de LogRocket, parece que el usuario no experimenta problemas. Veo algunas solicitudes bloqueadas para Facebook y Google Tag Manager, por lo que sospecho que tienen instalada una extensión de bloqueo.
Es un error recurrente de una persona que usa Chrome 75, no un navegador muy antiguo.
¿Alguna sugerencia de cómo podría solucionar este problema?

Gracias

Nota: @sentry/navegador versión 5.3.0

@burtyish actualizar a la última versión es el primer buen paso. Introdujimos _muchos_ cambios con respecto a este comportamiento en 5.7.0

@kamilogorek ¡Gracias!
Veo un error mucho más informativo ahora que actualicé a sentry.javascript.browser v5.12.1.
¡Y también tengo un rastro de pila!

@burtyish increíble! :)

¿Fue útil esta página
0 / 5 - 0 calificaciones