javascript - 在 gtm 加载之前未触发 Google 跟踪代码管理器 JavaScript 错误触发器
问题描述
我在 GTM 中添加了一个 JavaScript 错误触发器,显然它不会在 gtm 加载之前在页面中触发。我想知道如何才能捕捉到这些错误,例如在 gtm 加载之前我有下面的脚本
<script>
undefinedObject.undefinedMethod();
</script>
// I can see error in browser console but GTM because this error occurs before GTM loads.
我一开始就尝试window.onerror
通过将错误事件推送到dataLayer
window.dataLayer = window.dataLayer || [];
window.onerror = function (msg, url, lineNo, columnNo, error) {
var event = {
'event': "gtm.pageError",
'gtm.errorLineNumber': lineNo,
'gtm.errorMessage': msg,
'gtm.errorUrl': url,
'gtm.uniqueEventId': dataLayer.length+1
}
dataLayer.push(event);
return false;
}
它确实捕获了错误,因为在 gtm 初始化时事件已经存在dataLayer
,但是在 gtm 加载之后,稍后出现的任何错误都将被推送到dataLayer
TWICE,因为我覆盖了默认值window.onerror
,并且在加载时再次覆盖了 gtm
// window.onerror definition in GTM source file
ƒ (d,e,f,h,k){
c&&c(d,e,f,h,k); // this should be running the default `window.onerror` which I edited previously
Um({ // then GTM do it again
event:"gtm.pageError",
"gtm.errorMessage":d,
"gtm.errorUrl":e,
"gtm.errorLineNumber":f
});
return!1
}
那么,使用 GTM 捕获 JS 错误的正确方法是什么?无需将每个错误记录两次,也无需在 gtm 加载之前捕获错误。太感谢了。
解决方案
推荐阅读
- python - 运行 python opencv 脚本时出现“选择超时”错误
- java - Object.toString() OutOfMemory - 如果它包含 Base64,如何拆分?
- html - 带有 typescript 和 html 的动态表
- couchbase - 计数查询在 Couchbase 中运行速度太慢
- c# - 转换表达式的问题
> 查询 DbSet - angular - 使用 createSpyObj 对 observable 进行单元测试
- android - 向上滚动时隐藏顶部布局并在向下滚动时显示(如 collapsingToolbarLayout)
- ms-access - 访问:根据按钮按下更改子表单
- python - Python中文件解析器的包装器或继承
- oauth - 在 CAS 中实现 Google 身份验证 (OAuth)