谷歌跟踪代码管理器使用什么模式来观察 de 'dataLayer' 数组
What is the pattern used by Google Tag Manager in order to observe de `dataLayer` Array?
我观察了dataLayer
数组,但我没有看到push
的任何变化。实际上根本没有自定义方法。GTM 如何观察阵列的变化?据我所知,对Array
的更改不会引发任何事件,不是吗?
编辑:
我做了更多的研究,找到了谷歌与dataLayer
交互的库:https://github.com/google/data-layer-helper#listening-for-messages
我会看看代码,如果我了解内部工作原理,甚至可能回答我自己的问题。
GTM 使用的模式是发布/订阅者
代码中的一些有助于识别它的细节: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_()
相关文章:
- knockoutjs可观察数组
- 多次发射多个可观察器的问题
- 未激发路由的控制器属性上的观察者
- 无法在关闭弹出窗口时传递可观察的数据
- firefox插件:退出不工作的应用程序观察器
- 如何收集Knockout可观察性以放入JSON
- 在rxjs中巧妙的蒸汽可观察合并
- Knockout observable没有观察到其中一个属性
- 将属性设置为未定义时未通知观察者
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- KOValidation在错误消息中获取可观察值、$index()、$data等
- 启用具有多个布尔可观察标志的绑定
- 为什么prototypjs观察到回调函数有绑定
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- 检测 DIV 的高度何时变化,而无需轮询或突变观察者
- 财产'catch'在类型'可观察<任意>'
- 在另一个可观察量完成后触发第二个表单提交单击
- 如何使用javascript设置元素旋转和动态观察的动画
- 如何正确处理依赖ViewChild和Angular 2中可观察到的数据的组件上的更改检测
- 谷歌跟踪代码管理器使用什么模式来观察 de 'dataLayer' 数组