Javascript 谷歌标签管理器;认购;到dataLayer.push?如果是,如何进行?

Javascript 谷歌标签管理器;认购;到dataLayer.push?如果是,如何进行?,javascript,google-tag-manager,Javascript,Google Tag Manager,当我将任何内容推送到datalayer(这是一个数组)时,GTM是否注意到了这一点并将其直接推送到Google平台 或者,当装载GTM容器时,这种情况只发生一次 如果不是,GTM是否以某种方式订阅了datalayer.push()?还是只是投票?以下是我对DL的看法。当您将某个数据推送到它时,GTM确实会检测到它,但它不一定会将新数据跟踪到GA中。推送到DL寄存器中的数据,但如果您没有在页面视图、事件或其他标记中明确使用该数据,则该数据只会保留在DL中。但要显式地使用刚刚推入的数据,还应始终推入

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

或者,当装载GTM容器时,这种情况只发生一次


如果不是,GTM是否以某种方式订阅了datalayer.push()?还是只是投票?

以下是我对DL的看法。当您将某个数据推送到它时,GTM确实会检测到它,但它不一定会将新数据跟踪到GA中。推送到DL寄存器中的数据,但如果您没有在页面视图、事件或其他标记中明确使用该数据,则该数据只会保留在DL中。但要显式地使用刚刚推入的数据,还应始终推入一个
事件
,您可以使用该事件“访问”新的DL数据


因此,GTM确实不断地“侦听”被推入的新事物,但需要设置标签以使用新数据。

初始化GTM时,您传递数据层对象的引用,从那时起,该引用被GTM代码管理的特殊对象的“实例”所取代。比较初始化GTM前后chrome控制台告诉您的推送方法:

之前:

之后:

当您将某个内容推送到GTM初始化的数据层时,实际上正在调用一个定制的推送方法,该方法将通知它到客户端上运行的GTM代码,如果该推送触发标记触发,它将导致运行标记代码,但它不会发出任何其他请求,也不会发送到GTM服务器或类似的任何东西

请注意,除了推送之外,GTM还监视许多其他事件,如单击、表单提交、DOM就绪甚至容器加载,如您所述

您不局限于推送事件,您可以(并且在许多情况下应该)推送常规数据(消息),并且它仍然可以在Google Tag Manager上使用和可见,请记住,它需要交互来实际更新其内部状态(例如单击)

我不知道他们是怎么做的,但可以用以下简单的方法来完成:

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!
数据层将是


有没有线索说明这种倾听在技术上是如何发生的?它只是轮询数组吗?或者在Javascript中可以订阅推送到一个数组吗?答案很好,但不确定您是如何得到我暗示的“仅限于推送事件”的。如果您使用GTM,您会注意到,如果您需要访问与事件相关的特定数据点,那么推送
事件是最佳做法。Nyuen,我可能误解了您,从“…要明确使用您刚才推送的数据,您应该…推送事件”我以为您是说消息推送是不可访问的,这是不对的,您可以显式地使用非消息的推送,并且在许多情况下都应该这样做。我编辑我的答案是为了从中删除你的名字,它从来没有被当作批评:)不用担心!再说一次,答案很好。