Google跟踪代码管理器是否“订阅”了dataLayer.push?如果有,怎么样?

时间:2016-08-25 14:03:09

标签: javascript google-tag-manager

当我向datalayer(这是一个数组)推送任何内容时,GTM会注意到并将其直接推送到Google平台吗?

或者只是在加载GTM容器时才发生一次?

如果没有,GTM会以某种方式订阅datalayer.push()吗?或者只是民意调查?

2 个答案:

答案 0 :(得分:2)

初始化GTM时,传递dataLayer对象的引用,该对象从该点开始被GTM代码管理的特殊对象的“实例”替换。比较chrome控制台在初始化GTM之前和之后告诉您的推送方法:

在:

Before GTM

后:

After 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将是

dataLayer

答案 1 :(得分:1)

这是我对DL的看法。当您向它推送内容时,GTM会检测到它,但它不一定会将新数据跟踪到GA中。在DL中注册的数据,但如果您没有在网页浏览或事件或其他标记中明确使用该数据,那么该数据将保留在DL中。但是要明确使用您刚推入的数据,您应该始终推送event,您可以使用$scope.directions = [ { value: false, label: 'Asc' }, { value: true, label: 'Desc' } ]; 来“访问”新的DL数据。

因此GTM不断“倾听”新内容的推送,但需要设置标签才能使用新数据。