首页 > 解决方案 > 在 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 加载之后,稍后出现的任何错误都将被推送到dataLayerTWICE,因为我覆盖了默认值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 加载之前捕获错误。太感谢了。

标签: javascripterror-handlinggoogle-tag-manager

解决方案


推荐阅读