在dataLayer的Google文档中显示
如果您将Google跟踪代码管理器容器代码段放在 dataLayer阵列,Google跟踪代码管理器可能会发生故障,并且不会 能够读取数组中定义的变量。
我的问题是:是否可以在GTM容器上方声明变量(dataLayer),然后将事件推送到GTM下方的变量(dataLayer)?
答案 0 :(得分:2)
是的。这不仅是可能的,而且是GTM本身所做的(如果声明了dataLayer变量,则GTM会将其gtm.js,gtm.dom和gtm.load事件推送到现有的dataLayer(如果未定义,则声明变量本身)。
您需要记住的一件事是,您需要推送GTM事件-字面上是键/值对,其中键为“事件”。 GTM代码修改了数据层的本机push-Method,以扫描“ event”关键字,如果找到该关键字,它将更新其内部变量(即,您在推送GTM事件之前无法访问新变量)。
例如如果您想要一个dataLayer变量“ foo”,其值为“ bar”,则需要这样做
dataLayer.push({
"foo":"bar",
"event":"myCustomEvent"
});
然后可以访问foo变量并检索其值。您还可以执行一个自定义事件类型触发器,该事件将在推送事件“ myCustomEvent”后立即触发(尽管您不必保留“ bar”值,直到页面卸载后,再将另一个值推送到“ foo”键,或者您重置dataLayer)。
某些触发器类型(例如点击,提交和可见性)提供了自己的事件。
要记住的另一件事是,您不得在加载GTM代码后第二次声明dataLayer变量,否则您将删除GTM对dataLayer和GTM中断所做的更改。
但是,简而言之,是的,这完全是应该起作用的对象,您可以在GTM代码之后推送值。