当我向datalayer(这是一个数组)推送任何内容时,GTM会注意到并将其直接推送到Google平台吗?
或者只是在加载GTM容器时才发生一次?
如果没有,GTM会以某种方式订阅datalayer.push()吗?或者只是民意调查?
答案 0 :(得分:2)
初始化GTM时,传递dataLayer对象的引用,该对象从该点开始被GTM代码管理的特殊对象的“实例”替换。比较chrome控制台在初始化GTM之前和之后告诉您的推送方法:
在:
后:
当您将某些内容推送到GTM-initalized dataLayer时,实际上正在调用一个自定义推送方法,将其通知客户端上运行的GTM代码,如果该推送触发了标记触发,则会导致标记代码运行,但它不会发出任何其他请求,也不会发送到GTM服务器或类似的东西。
观察除了推送之外,还有很多其他GTM观看的事件,例如点击,表单提交,DOM就绪,甚至容器加载,如您所述。
您不仅限于推送活动,您可以(并且在许多情况下应该)推送常规数据(消息),它仍然可以在Google跟踪代码管理器上使用和显示,请记住它实际上需要实际交互更新其内部状态(例如单击)
他们如何去做,我不知道,但可以通过以下简单的事情来完成:
var dataLayer = [{name: 'Rui'}];
var DLWatch = (function(){
var init = function(){
window.dataLayer.push = push;
};
var push = function(data) {
window.dataLayer = window.dataLayer.concat([data]);
console.log('Data pushed!');
};
return {init: init};
})();
DLWatch.init();
dataLayer.push({foo: 'bar'});
你会得到什么:
Data pushed!
dataLayer将是
答案 1 :(得分:1)
这是我对DL的看法。当您向它推送内容时,GTM会检测到它,但它不一定会将新数据跟踪到GA中。在DL中注册的数据,但如果您没有在网页浏览或事件或其他标记中明确使用该数据,那么该数据将保留在DL中。但是要明确使用您刚推入的数据,您应该始终推送event
,您可以使用$scope.directions = [
{
value: false,
label: 'Asc'
},
{
value: true,
label: 'Desc'
}
];
来“访问”新的DL数据。
因此GTM不断“倾听”新内容的推送,但需要设置标签才能使用新数据。