谷歌跟踪代码管理器使用什么模式来观察 de 'dataLayer' 数组

What is the pattern used by Google Tag Manager in order to observe de `dataLayer` Array?

本文关键字:观察 de 数组 dataLayer 模式 代码 跟踪 管理器 什么 谷歌      更新时间:2023-09-26

我观察了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_()