如果在 gtm 初始化之前或之后直接发送,GTM dataLayer.push 将不起作用

问题描述 投票:0回答:1

我想尽快向GTM发送一些数据。 我尝试在标签初始化之前、之后以及初始化脚本内调用

dataLayer.push
。 3种方法都失败了

<head>
...

// Version 1
<script defer>
    if (!navigator.isServer) {
        var MIXPANEL_PROXY_DOMAIN = 'https://#mixpanelProxyDomain#.crexi.com';
        (function (w, d, s, l, i) {
            w[l] = w[l] || [];
            w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
            var f = d.getElementsByTagName(s)[0],
                j = d.createElement(s),
                dl = l !== 'dataLayer' ? '&l=' + l : '';
            j.async = true;
            j.type = 'text/javascript';
            j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
            f.parentNode.insertBefore(j, f);
        })(window, document, 'script', 'dataLayer', '#gtmAccountId#');

        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
            'partyTownEnabled': true,
            event: 'Partytown_ready'
        });
    }
</script>

// Version 2
<script defer>
    if (!navigator.isServer) {
        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
            'partyTownEnabled': true,
            event: 'Partytown_ready'
        });
        var MIXPANEL_PROXY_DOMAIN = 'https://#mixpanelProxyDomain#.crexi.com';
        (function (w, d, s, l, i) {
            w[l] = w[l] || [];
            w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
            var f = d.getElementsByTagName(s)[0],
                j = d.createElement(s),
                dl = l !== 'dataLayer' ? '&l=' + l : '';
            j.async = true;
            j.type = 'text/javascript';
            j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
            f.parentNode.insertBefore(j, f);
        })(window, document, 'script', 'dataLayer', '#gtmAccountId#');

    }
</script>

// Version 3
<script defer>
    if (!navigator.isServer) {
        var MIXPANEL_PROXY_DOMAIN = 'https://#mixpanelProxyDomain#.crexi.com';
        (function (w, d, s, l, i) {
            w[l] = w[l] || [];
            w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
            w[l].push({
              'partyTownEnabled': true,
              event: 'Partytown_ready'
            });
            var f = d.getElementsByTagName(s)[0],
                j = d.createElement(s),
                dl = l !== 'dataLayer' ? '&l=' + l : '';
            j.async = true;
            j.type = 'text/javascript';
            j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
            f.parentNode.insertBefore(j, f);
        })(window, document, 'script', 'dataLayer', '#gtmAccountId#');
    }
</script>

...
</head>

partyTownEnabled
变量存在。
Partytown_ready
的自定义事件触发器存在。 该标签绑定到
Partytown_ready
触发器。 删除
defer/async
没有任何作用。

当我像这样从 Google 开发工具控制台运行它时

dataLayer.push({ 'partyTownEnabled': true, event: 'Partytown_ready' });
它正在按预期工作。 我认为 gtm 的设计是为了在猴子修补之前拾取所有预定义的 dataLayer 元素,但它似乎不起作用

javascript google-tag-manager google-datalayer
1个回答
0
投票

partytown
库和 GTM 集成似乎存在问题。 https://github.com/BuilderIO/partytown/issues/596

将此问题作为 partytown bug 来结束。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.