Google 跟踪代码管理器使用什么模式来观察 de `dataLayer` 数组?
What is the pattern used by Google Tag Manager in order to observe de `dataLayer` Array?
我观察了 dataLayer
数组,但没有看到 push
有任何变化。实际上,根本没有自定义方法。 GTM 如何观察数组的变化?据我所知,对 Array
的更改不会引发任何事件,是吗?
编辑:
我做了一些更多的研究并找到了 Google 用于与 dataLayer
交互的库:https://github.com/google/data-layer-helper#listening-for-messages
我会看一下代码,如果我了解内部工作原理,甚至可能会回答我自己的问题。
GTM 使用的模式是 publish / subscriber
代码中的一些细节有助于识别它:https://github.com/google/data-layer-helper/blob/master/src/helper/helper.js
的第 76 和 181 行
最后是第 114 和 119 行
// Add listener for future state changes.
var oldPush = dataLayer.push;
var that = this;
dataLayer.push = function() {
var states = [].slice.call(arguments, 0);
var result = oldPush.apply(dataLayer, states);
that.processStates_(states);
return result;
};
查看 states
变量及其如何传递给 this.processStates_()
我观察了 dataLayer
数组,但没有看到 push
有任何变化。实际上,根本没有自定义方法。 GTM 如何观察数组的变化?据我所知,对 Array
的更改不会引发任何事件,是吗?
编辑:
我做了一些更多的研究并找到了 Google 用于与 dataLayer
交互的库:https://github.com/google/data-layer-helper#listening-for-messages
我会看一下代码,如果我了解内部工作原理,甚至可能会回答我自己的问题。
GTM 使用的模式是 publish / subscriber
代码中的一些细节有助于识别它:https://github.com/google/data-layer-helper/blob/master/src/helper/helper.js
的第 76 和 181 行最后是第 114 和 119 行
// Add listener for future state changes.
var oldPush = dataLayer.push;
var that = this;
dataLayer.push = function() {
var states = [].slice.call(arguments, 0);
var result = oldPush.apply(dataLayer, states);
that.processStates_(states);
return result;
};
查看 states
变量及其如何传递给 this.processStates_()