正如Stack Overflow 上的这个线程中所描述的,发送到window.onerror
的某些事件将导致[object Event]
被记录为消息,而不是其他的。 如果 Sentry 能够检测到这些古老的Event
对象并从中挖掘出一些细节,那么记录到 Sentry 的内容是我们可以采取行动并尝试修复的可理解的东西,那就太好了。
我们日志中的一个特定样本显示了以下信息:
我可以验证从 Android 4.1 到 4.4 的 Android 浏览器,似乎来自第 3 方 Android 手机(例如三星、HTC)的 Android 浏览器同样受到此问题的影响。 我无法确认 Nexus 手机是否受到影响。
这将是一个很棒的功能,而且实现起来似乎并不困难。 或许可以快速检查一下message.toString() == '[object Event]'
,然后是for-in
循环来访问事件对象的属性。 这对于帮助调试 Android 4.1 - 4.4 中的站点问题非常有用。
@d10 – 我已经尝试过了,但我找不到真正的浏览器来验证它是否有效。 我尝试在 BrowserStack 上模拟 Android 4.1 – 4.4 并使用现有的 Android 浏览器,但它们报告错误很好。
那将是一个很棒的功能! 旧浏览器也有同样的问题!
这让我发疯,所以我为此写了一个补丁https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling
在提交拉取请求之前,我将在生产环境中对其进行一些测试。
@rollokb – 提交看起来很棒。 让我知道它在生产中的情况; 之后我很乐意将它合并到 master 中。
伟大的! 它也让我发疯! +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 的? 它似乎错误地处理了事件属性(即,它将所有事件道具视为自己的)。
https://github.com/getsentry/raven-js/blob/master/Gruntfile.js#L193
它似乎错误地处理了事件属性(即,它将所有事件道具视为自己的)。
您可以尝试模拟一个与在 Chrome/其他浏览器中观察到的行为相同的事件对象。 (希望发送这些对象的旧版浏览器感觉相似。)
您还可以尝试让测试运行 Phantom2 以查看行为是否更准确。 我相信他们现在运行 1.9.8。
@rollokb – 有这方面的消息吗?
我今天从 Android 4 上的 Facebook Browser v80 中获得了数百个。那不是很旧,是吗?
我们在使用 Android 浏览器的 Android 4.x 上遇到了许多此类错误
我今天从 Android 4 上的 Facebook Browser v80 中获得了数百个。那不是很旧,是吗?
我很确定“Facebook 浏览器”只是 Facebook 包装了内部网络浏览器的任何内容。
基本上,这个错误只会出现在一堆国际版本的安卓手机中。 当您看到此类错误时,请查看您的设备列表,您会注意到它们具有类似三星 GT-S8600 的设备代码——它们不是北美/西方型号。
他们似乎正在使用一些声称是“Chrome Mobile”或“Android Browser”(用户代理很容易伪造)的浏览器分支,但似乎具有不同的错误对象签名。 我很难重现该错误(包括尝试购买其中一些手机用于办公室),但我可能很快就会再试一次。
我们没有在稀有浏览器上遇到这些错误,我们只是在带有 Chrome 51.0.2704 的 Windows 10 上遇到了这些错误
嗨,大家好!
我也有乌鸦报告
...
"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,但收到此错误
我正在使用下一个 hack 作为临时解决方案:
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:使用此修复程序获取“意外令牌 =>”错误
@webschik
@AlexanderMatveev ,这是 ES2015 语法。
你可以更换它
@webschik添加了这个 hack,看起来没有任何改变,仍然只是“[object Event]”错误。
@AlexanderMatveev ,这很奇怪,因为这适用于我的项目。 可能我们需要在那里进行更多调查
@webschik
这是脚本顺序:
<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 而被捕获,则堆栈跟踪可能没有帮助(但它会告诉您它是如何被捕获的)。
在托管的 Sentry for UA 上与Raven 3.6.1
相同: 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 .. 是主要的操作系统,据报道的许多设备都是三星-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
这里也一样,有解决办法吗?? :S
我有同样的问题
我目前有同样的问题......有很多这样的错误,我很快就会达到哨兵阈值😞
我遇到了几十个这样的问题,都是在 Windows 10 上使用 Chrome 45。
它仍在 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)`
未处理的承诺拒绝:真
用户代理:Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; vivo 1610 Build/MMB29M) AppleWebKit/537.36 (KHTML, like 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 中使用事件提示和自定义错误处理来修复。
@kamilogorek
这可以在新 SDK 中使用事件提示和自定义错误处理来修复。
你能详细说明一下吗? 任何文档链接?
至少我们需要哪个版本?
我更喜欢为这个问题提供那些“事件提示”和“自定义错误处理”设置的代码片段。
谢谢!
@hiroshi请参阅https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326
这是新的 sentry-javascript SDK 的一个功能,它已作为 RC Today 发布。 它不会被移植回 raven-js/node。
嗨,我一直在 Sentry 中看到这样的错误:
exception | Error: [object Event]
没有附加堆栈跟踪,也没有有用的信息。 从 LogRocket 会话来看,用户似乎没有遇到任何问题。 我确实看到一些对 Facebook 和 Google Tag Manager 的请求被阻止,所以我怀疑他们安装了阻止程序扩展。
这是使用 Chrome 75 的人反复出现的错误,而不是非常旧的浏览器。
有什么建议我将如何解决这个问题?
谢谢
注意:@sentry/浏览器版本 5.3.0
@burtyish更新到最新版本是第一步。 我们在 5.7.0 中引入了很多关于此行为的更改
@kamilogorek谢谢!
现在我已经升级到 sentry.javascript.browser v5.12.1,我看到了一个信息量更大的错误。
而且我也有一个堆栈跟踪!
@burtyish太棒了! :)
最有用的评论
@rollokb – 有这方面的消息吗?