【问题标题】:Google Tag Manager - Parse Dynamic Data Layer VariableGoogle 跟踪代码管理器 - 解析动态数据层变量
【发布时间】:2018-08-08 12:54:55
【问题描述】:

我想解析一个“推送”的数据层字符串。我打算用它来跟踪点击事件并在 Google Analytics 中设置适当的渠道,它看起来如下:products.view.19|查看最近的产品|19

  • 第一部分 (products.view.19) 是唯一的页面标识符。
  • 第二部分(查看最近的产品)是动作。
  • 最后一部分 (19) 是动作标识符,这样可以更容易地对动作进行分组和比较。

所以我做了以下操作,我首先创建了一个触发器(当链接中包含“data-trackclick”标签时触发),它将数据值推送到一个变量(数据层的变量)。但是,现在我想将该变量拆分为 3 个新变量,如上所述。我为此选择了“javascript 宏”,但不知何故它返回了“未定义”。宏如下所示:

function() {
  var data = {{TrackClickData}};
  var pieces = data.split('|');

  if (pieces[0].length()) {
      return pieces[0];
  } else {
      return data;
  }
}

显然这不起作用,因为它只会在初始加载时运行,而不是(像我想的那样)在请求宏时运行,所以它应该以某种方式在“点击”时触发,然后相应地设置变量。

这可能吗?或者我真的必须在脚本标签中添加 dataLayer.push() 吗?

【问题讨论】:

    标签: google-tag-manager


    【解决方案1】:

    一些事情:

    • .length() 错误,数组长度属性为.length,没有()
    • 如果存在,pieces[0] 不是数组,那么.length 将返回字符串长度,查看How do you check for an empty string in JavaScript? 了解更多检查空字符串的标准方法
    • 这可能吗?几乎没有什么是你不能用 GTM 做的,因为你可以编写 JavaScript 代码,你可以做任何你的代码允许你做的事情,并分割一个字符串以使用部分它作为变量当然在可能性范围内。

    我的建议是首先让您的代码在 GTM 之外运行(例如在浏览器控制台中测试它),然后在一切正常后将其移植到 GTM。

    【讨论】:

    • 感谢您的反馈。我只是将 'length()' 更改为 'length' ,它仍然没有工作。因此,我为此编写了自己的 webpack 模块,现在我可以轻松地添加新的 dataLayer 对象而无需太多麻烦。
    • length 不是方法,而是属性。它也是字符串对象 (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…) 的属性。对于字符串,它包含作为值的字符数(或者更确切地说是“代码单元”),对于数组,它包含元素的数量。
    • 感谢 Eike 的更正,相应地更新了我的答案