我想尽快向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 元素,但它似乎不起作用
partytown
库和 GTM 集成似乎存在问题。
https://github.com/BuilderIO/partytown/issues/596
将此问题作为 partytown bug 来结束。