如何从dataLayer对象中获取值

11
我想从Google标签管理器的dataLayer对象中获取一些值。 在Chrome标签助手中,我得到的值是这样的:
[
  {
    "gtm.start": 1503053374849,
    "event": "gtm.js",
    "gtm.uniqueEventId": 0
  },
  {
    "event": "gtm.dom",
    "gtm.uniqueEventId": 1
  },
  {
    "event": "gtm.load",
    "gtm.uniqueEventId": 2
  },
  {
    "Linker": "_ga=53655374"
  }
]

我需要获取 "Linker" 的值。我尝试过 dataLayer[3].Linker,但它给了我 "undefined" 或者空值,对于 dataLayer[1].event 也是同样的情况(它是空白而不是返回值 = "gtm.dom")。当我尝试 dataLayer[0].event 时,它会返回正确的值 'gtm.js'

请帮助我如何获取 "Linker" 的值。


2
你所使用的访问对象的方法是正确的——假设在运行该代码时该对象可用,并且不是通过异步方法检索的。为了帮助您,我们需要查看检索对象的代码。 - Rory McCrossan
尝试使用 dataLayer[3].Linker - Rakesh Sharma
@RoryMcCrossan 我正在尝试在页面页脚打印并保存这个值到一个变量中。有没有办法在表单提交时获取这个值? - Rakesh Sharma
6个回答

12
您可以通过Google标签管理器JavaScript API访问推送的数据。变量部分将是您GTM容器的容器ID,请确保您寻址正确的容器。
google_tag_manager['<container-id>'].dataLayer.get('gtm.start');
//result e.g.: 1210115541132
结果将是数据层状态的最后一个值。

你知道这个在哪里有记录吗? - Protector one
1
没有官方文档,但我记得这来自于 data-layer-helper:https://github.com/google/data-layer-helper - Moritz

4
在表格中打印数据层,使用console.table(dataLayer);,并注意它将显示Linkerindex值。

enter image description here 然后,您可以使用dataLayer[XXX],其中XXXLinkerindex值。

我使用settimgout函数正确获取了dataLayer[3].Linker,但有时在提交表单时会得到空值。 - Rakesh Sharma
请注意,在某些情况下,某些表单可能不会触发“submit”事件,例如Angular的“click-ng”。首先,请确保通过检查$('#form').on('submit', function(){console.log})来触发“submit”事件。如果没有触发,则可能需要将按钮更改为type=submit或手动触发submit $('#button').on('click', function(){$('#form').trigger('submit')}) - Husain Al Faraj
这是一个老问题,但是否有任何方式可以找到事件名称为“some value”的数据层事件的索引? - Si8

2

您可以通过以下代码获取dataLayer,只需调用getFromDataLayer('your_object_key_from_dataLayer');,然后您应该从dataLayer中获取值。您也可以使用google_tag_manager['container_id'].dataLayer.get来获取相同的结果,但是这将使您的代码依赖于GTM容器ID。

function getFromDataLayer(key) { 
    let result = null; 
    dataLayer.push(function() { 
        let value = this.get(key);
        if (value) {
            result = value;
        }
    });
    return result;    
};

0

我一直在寻找类似问题的答案,看到您还没有找到确定的解决方案。

我找到了 Simo Ahava的这篇文章,它强调了使用GTM访问对象变量时,纯JS和GTM之间的区别。

根据那篇文章,您应该能够使用以下方法并获取该值:

dataLayer.3.Linker


0

最好的方法是使用 Google Tag Manager 本身,因为它就是为此而设计的。要做到这一点,请转到 GTM 界面 (tagmanager.google.com) 并创建一个数据层变量 variable。然后,您可以在所选择的标签中使用此变量,将其值传递给第三方系统。


0

获取GTM容器ID可能会受到环境和加载的容器数量的影响。这是一种快速简便的方法来获取值。

google_tag_manager[Object.getOwnPropertyNames(window.google_tag_manager).filter(name => name.includes('GTM'))[0]].dataLayer.get('gtm.start');


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