单页应用程序中重置数据层变量(Google Tag Manager)

8
尝试在移动站点上实现内容分组,该站点是SPA。 情景如下:当我第一次访问PDP页面时,类别变量被设置,并发送到通用分析标签中的内容组。如果此后我返回主页,则类别变量不会更新,主页也将归入先前PDP页面相同的内容组。
只有当我访问另一个PDP页面时,此变量才会更新。
我使用自定义事件PageLoad来模拟pageView事件。只希望数据层变量在连续的PageLoad事件中刷新。
谢谢

你尝试更新每个页面视图的变量了吗? - mrbubu
是的,那就是我想要的...但不确定该如何实现。这可以通过使用dataLayer.push触发GTM标签来完成吗? - Pranay
可以使用自定义的HTML标签来完成,但最好还是从后端将数据推送到dataLayer。 - mrbubu
3个回答

7
现在有一种记录的方法可以重置数据层。请参阅数据层文档中的“重置”:Reset
如果您将一个函数推送到 dataLayer ,它将使您可以访问具有 get set reset 语义的对象。对于这个问题, reset 是相关的部分。

我必须说,这已经超出完美了。太棒了,谢谢你。在处理许多变量时,这特别有用。 - jtomasrl

4
如果 reset() 对你无效,也许你想尝试以下代码。
const boomDataLayer = () => {
  if (window.dataLayer !== undefined && window.google_tag_manager !== undefined) {
    window.dataLayer.length = 0;
    const gtmContainerReg = /GTM-/i;

    for (const gtmKey of Object.keys(window.google_tag_manager)) {
      if (gtmContainerReg.test(gtmKey) && window.google_tag_manager[gtmKey].dataLayer
        && window.google_tag_manager[gtmKey].dataLayer.reset
      ) {
        window.google_tag_manager[gtmKey].dataLayer.reset();
      }
    }
  }
}

1
不确定为什么 https://developers.google.com/tag-platform/devguides/datalayer#reset 没有起作用。这个可以。 - Benedikt

3

有一种未记录的方法可以使用此方法清除整个dataLayer:

var gtm = window.google_tag_manager['GTM-XXXXXX'];
gtm.dataLayer.reset();

现在您不需要这样做,因为您可以在数据层中将不再需要的值设置为undefined

dataLayer.push({
  'please_go_away': undefined
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接