Google 跟踪代码管理器 "subscribe" 到 dataLayer.push?如果是,如何?
Does Google Tag Manager "subscribe" to dataLayer.push? If yes, how?
当我将任何内容推送到数据层(这是一个数组)时,GTM 会注意到并将其直接推送到 Google 平台吗?
还是仅在加载 GTM 容器时发生一次?
如果不是,GTM 是否以某种方式订阅了 datalayer.push() ?还是只是投票?
这是我对 DL 的看法。当您向其推送内容时,GTM 会检测到它,但它不一定会将新数据跟踪到 GA 中。推入的数据在 DL 中注册,但如果您没有在页面浏览、事件或其他标记中明确使用该数据,那么该数据将保留在 DL 中。但是要显式使用您刚刚推送的数据,您还应该始终推送一个 event
,您可以将其用于 'access' 新的 DL 数据。
因此 GTM 会不断地'listen' 推送新内容,但需要设置标签才能使用新数据。
当您初始化 GTM 时,您传递了数据层对象的引用,从那时起,它被 GTM 代码管理的特殊对象的 'instance' 所取代。比较初始化 GTM 前后 chrome 控制台告诉您有关 push 方法的内容:
之前:
之后:
当您将某些内容推送到 GTM 初始化的 dataLayer 时,实际上是在调用自定义推送方法,该方法将其通知客户端上的 GTM 代码 运行ning,如果该推送触发标签触发,它将导致标记代码为 运行,但它不会发出任何其他请求,也不会发送到 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!
数据层将是
当我将任何内容推送到数据层(这是一个数组)时,GTM 会注意到并将其直接推送到 Google 平台吗?
还是仅在加载 GTM 容器时发生一次?
如果不是,GTM 是否以某种方式订阅了 datalayer.push() ?还是只是投票?
这是我对 DL 的看法。当您向其推送内容时,GTM 会检测到它,但它不一定会将新数据跟踪到 GA 中。推入的数据在 DL 中注册,但如果您没有在页面浏览、事件或其他标记中明确使用该数据,那么该数据将保留在 DL 中。但是要显式使用您刚刚推送的数据,您还应该始终推送一个 event
,您可以将其用于 'access' 新的 DL 数据。
因此 GTM 会不断地'listen' 推送新内容,但需要设置标签才能使用新数据。
当您初始化 GTM 时,您传递了数据层对象的引用,从那时起,它被 GTM 代码管理的特殊对象的 'instance' 所取代。比较初始化 GTM 前后 chrome 控制台告诉您有关 push 方法的内容:
之前:
之后:
当您将某些内容推送到 GTM 初始化的 dataLayer 时,实际上是在调用自定义推送方法,该方法将其通知客户端上的 GTM 代码 运行ning,如果该推送触发标签触发,它将导致标记代码为 运行,但它不会发出任何其他请求,也不会发送到 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!
数据层将是