Как описано в этой ветке на Stack Overflow , некоторые события, отправленные на window.onerror
, приведут к тому, что [object Event]
будет регистрироваться как сообщение, и больше ничего. Было бы здорово, если бы Sentry мог обнаруживать эти древние Event
объекты и извлекать из них некоторые детали, чтобы то, что регистрируется в Sentry, было чем-то понятным, с чем мы могли бы действовать и пытаться исправить.
Один конкретный образец из наших журналов показывает следующую информацию:
Я могу подтвердить, что браузер 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: получение ошибки «Неожиданный токен =>» с этим исправлением
@вебщик
@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
никакой трассировки стека.
мы должны просто игнорировать это?
То же самое.
Такой же, как и все здесь. Если эта информация поможет:
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
то же самое здесь, любое решение ?? :С
у меня такая же проблема
В настоящее время у меня та же проблема... таких ошибок много, и я очень скоро достиг порога сторожевого порога 😞
Я получаю десятки таких проблем, все с 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
Я приложил скриншот ошибки (часто случается со многими старыми браузерами)
Это можно исправить в новом 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 круто ! :)
Самый полезный комментарий
@rollokb — есть новости по этому поводу?