Sentry-javascript: Старые браузеры вызывают регистрацию [object Event]

Созданный на 3 авг. 2015  ·  50Комментарии  ·  Источник: getsentry/sentry-javascript

Как описано в этой ветке на Stack Overflow , некоторые события, отправленные на window.onerror , приведут к тому, что [object Event] будет регистрироваться как сообщение, и больше ничего. Было бы здорово, если бы Sentry мог обнаруживать эти древние Event объекты и извлекать из них некоторые детали, чтобы то, что регистрируется в Sentry, было чем-то понятным, с чем мы могли бы действовать и пытаться исправить.

Самый полезный комментарий

@rollokb — есть новости по этому поводу?

Все 50 Комментарий

Один конкретный образец из наших журналов показывает следующую информацию:

  • Браузер: Долфин 3.0
  • Устройство: Samsung GT-S8600
  • ОС: Бада 2.0

Я могу подтвердить, что браузер Android от Android 4.1 до 4.4, по-видимому, от сторонних телефонов Android (например, Samsung, HTC) также подвержен этой проблеме. Я не могу подтвердить, затронуты ли телефоны Nexus.

Это было бы отличной функцией, и ее не кажется относительно сложной для реализации. Возможно, быстрая проверка, если message.toString() == '[object Event]' , а затем цикл for-in для доступа к свойствам объекта события. Это было бы здорово помочь отладить проблемы с сайтом в Android 4.1–4.4.

@ d10 - я экспериментировал с этим, но не могу найти настоящий браузер, чтобы убедиться, что он работает. Я пробовал эмулировать Android 4.1–4.4 в BrowserStack и использовать стандартный браузер Android, но они прекрасно сообщают об ошибках.

Это была бы отличная функция! У нас такие же проблемы со старыми браузерами!

Это сводило меня с ума, поэтому я написал патч для этого https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling .

Я собираюсь немного протестировать его в производстве, прежде чем отправлять запрос на включение.

@rollokb — этот коммит выглядит великолепно. Дайте мне знать, как это происходит в производстве; Я был бы рад объединить его в мастер впоследствии.

Здорово! Меня это тоже с ума сводит! +1

Кажется, работает нормально в производстве.

Редактировать:

Кажется, работает нормально, но только с событиями, которые я запустил сам. По-прежнему не получаю абсолютно никакой информации о содержании события.

Кажется, работает нормально, но только с событиями, которые я запустил сам. По-прежнему не получаю абсолютно никакой информации о содержании события.

Проблема скорее всего здесь:

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

Проверяя hasOwnProperty , вы не получите никаких свойств, производных от Event.prototype . Если эти затронутые браузеры не будут делать то же, что и вы в своем тесте — размещать свойства непосредственно в объекте Event , который они создают, — мы не увидим никаких данных.

С другой стороны, если вы удалите эту проверку, мы получим кучу свойств, которые не имеют ничего общего с ошибкой. Но, возможно, стоит посмотреть, как это выглядит.

Возможно ты прав. Я был пойман на этом при тестировании с PhantomJS.

Обновил ветку
https://github.com/rollokb/raven-js/blob/feat/old-webkit-Event-handling/src/raven.js#L1109 -L1121

Прохладный. Опять же, я ценю, что вы копаетесь в этом.

Немного не по теме, но как загружается PhantomJS в этом проекте? Кажется, что он неправильно обрабатывает свойства событий (т. е. видит все реквизиты Event как свои собственные).

Виа кмияширо/хрюканье-мокко

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

Кажется, что он неправильно обрабатывает свойства событий (т. е. видит все реквизиты Event как свои собственные).

Вы можете попробовать издеваться над объектом Event, который ведет себя так же, как в Chrome/каком-либо другом браузере. (Надеюсь, устаревшие браузеры, отправляющие эти объекты, чувствуют себя так же.)

Вы также можете попробовать запустить тесты для запуска Phantom2, чтобы увидеть, является ли поведение более точным. Я считаю, что они используют 1.9.8 прямо сейчас.

@rollokb — есть новости по этому поводу?

Я получил сотни таких сегодня от Facebook Browser v80 на Android 4. Это не так уж и старо, не так ли?

Мы получаем многие из этих ошибок на Android 4.x с Android Browser

Я получил сотни таких сегодня от Facebook Browser v80 на Android 4. Это не так уж и старо, не так ли?

Я почти уверен, что «Браузер Facebook» — это просто оболочка Facebook, какой бы ни был внутренний веб-браузер.

По сути, эта ошибка возникает только в нескольких международных версиях телефонов Android. Взгляните на список своих устройств, когда вы увидите такие ошибки, вы заметите, что они имеют коды устройств, такие как Samsung GT-S8600, которые не являются североамериканскими/западными моделями.

Похоже, они используют какую-то вилку браузера, который претендует на звание «Chrome Mobile» или «Android Browser» (пользовательские агенты легко подделываются), но, по-видимому, имеет другую сигнатуру объекта Error. Мне было трудно воспроизвести ошибку (включая попытку приобрести некоторые из этих телефонов для использования в офисе), но, скорее всего, я попробую еще раз в ближайшее время.

Мы не получаем эти ошибки в редких браузерах, мы только что получили их в Windows 10 с Chrome 51.0.2704.

Привет, ребята!

Также у меня есть отчет Raven

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

в мобильном браузере на Android. Пользовательский агент
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 за это

Итак, начиная с версии 3.7.0 мы теперь генерируем синтетические трассировки для [object Event] и других перехваченных объектов, не являющихся ошибками. Я бы рекомендовал попробовать 3.7.0 и посмотреть, какие результаты вы получите.

@benvinegar У меня установлена ​​версия 3.7.0, но я получаю эту ошибку

Я использую следующий хак как временное решение:

    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 Похоже на опечатку в этой строке:

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

И вы уверены, что эта конструкция разрешена:

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

UP: получение ошибки «Неожиданный токен =>» с этим исправлением

@вебщик

2016-09-23 12 45 43

@AlexanderMatveev , это синтаксис ES2015.
Вы можете заменить его

@webschik Добавил этот хак и похоже, что ничего не изменилось, по-прежнему появляется только ошибка «[object Event]».

@AlexanderMatveev , это странно, потому что это работает для моего проекта. Вероятно, нам нужно больше исследований там

@вебщик

Вот порядок скриптов:

<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 У меня установлена ​​версия 3.7.0, но я получаю эту ошибку

Ты бы все равно получил. Разница в том, что он должен генерировать синтетическую трассировку стека. Однако, если он пойман из-за того, что он всплывает до window.onerror, трассировка стека может быть бесполезной (но она скажет вам, как он был пойман).

То же самое было с Raven 3.6.1 на хостинге Sentry для 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

У меня также есть несколько событий, большинство из них из браузера Android или Facebook. Даже Facebook 95.0, который должен быть последним, вызывает эту ошибку. Андроид 4. . является основной ОС, и многие устройства, на которых она указана, — это Samsung-GT [что-то]. Я использую версию 3.7.0.

Мы также получили это от универсального пользовательского агента, без специальных устройств:

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

Ворон 3.9.0

все еще происходит на 3.9.1 несколько сотен раз в день, на facebook и android browser.name
никакой трассировки стека.

мы должны просто игнорировать это?

То же самое.

Такой же, как и все здесь. Если эта информация поможет:

image

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

Браузер: Facebook 87.0.0

то же самое здесь, любое решение ?? :С

у меня такая же проблема

image

В настоящее время у меня та же проблема... таких ошибок много, и я очень скоро достиг порога сторожевого порога 😞

Я получаю десятки таких проблем, все с Chrome 45 в Windows 10.

Это все еще происходит на Raven 3.15.0, в браузере Facebook и Android.
Должны ли мы просто игнорировать это?

Кто-нибудь нашел решение? В моем случае появляется это в часовом:

`[объект Событие]

в 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)`

необработанныйPromiseRejection: правда

Пользовательский агент: Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; vivo 1610 Build/MMB29M) AppleWebKit/537.36 (KHTML, например, Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.8.1112 Mobile Safari /537,36

Семейство устройств: vivo 1610
Модель устройства: 1610
Марка устройства: vivo

Андроид 6.0.1

UC Браузер 12.5.8

Моя версия клиента raven-js: 3.25.0

Я приложил скриншот ошибки (часто случается со многими старыми браузерами)
raven-screenshot

Это можно исправить в новом SDK с помощью подсказок о событиях и пользовательской обработки ошибок.

@камилогорек

Это можно исправить в новом SDK с помощью подсказок о событиях и пользовательской обработки ошибок.

Можете ли вы уточнить это? Есть ссылки на документ?
Хотя бы какая версия нам нужна?
Я предпочитаю иметь фрагмент кода этих «подсказок к событиям» и «пользовательских настроек обработки ошибок» для этой проблемы.

Спасибо!

@hiroshi см. https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326
Это функция нового SDK sentry-javascript, который был выпущен как RC Today. Он не будет перенесен обратно в raven-js/node.

Привет, я продолжаю видеть такую ​​​​ошибку в Sentry:

exception | Error: [object Event]

Там нет трассировки стека и никакой полезной информации. Судя по сеансам LogRocket, у пользователя не возникает проблем. Я вижу некоторые заблокированные запросы к Facebook и Диспетчеру тегов Google, поэтому я подозреваю, что у них установлено расширение блокировки.
Это повторяющаяся ошибка человека, использующего Chrome 75, а не очень старый браузер.
Любые предложения, как я могу решить эту проблему?

Спасибо

Примечание: @sentry/browser версии 5.3.0

Обновление @burtyish до последней версии — первый хороший шаг. Мы внесли _множество_ изменений в отношении этого поведения в 5.7.0.

@kamilogorek Спасибо!
Теперь, когда я обновился до sentry.javascript.browser v5.12.1, я вижу гораздо более информативную ошибку.
И у меня тоже есть трассировка стека!

@burtyish круто ! :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги