代码之家  ›  专栏  ›  技术社区  ›  Beto Frega

Google标记管理器使用什么模式来观察“数据层”阵列?

  •  2
  • Beto Frega  · 技术社区  · 10 年前

    我观察到 dataLayer 数组,我看不到对 push 实际上,根本没有自定义方法。GTM如何观察阵列的变化?据我所知 Array 不要扔任何东西,是吗?


    编辑:

    我做了更多的研究,找到了谷歌与 数据层 : https://github.com/google/data-layer-helper#listening-for-messages
    我会看一看代码,如果我了解内部工作原理,也许会回答我自己的问题。

    1 回复  |  直到 3 年前
        1
  •  5
  •   Krzysztof Safjanowski    9 年前

    GTM使用的模式是 出版 / 订阅人

    代码中有助于识别它的一些细节: https://github.com/google/data-layer-helper/blob/master/src/helper/helper.js

    最后是第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_()