如何在全局 JavaScript 变量等于某个值时触发 Google 跟踪代码管理器事件

How to fire Google Tag Manager event when global JavaScript variable equals a value

我正在尝试了解如何根据全局 JavaScript 变量的值触发 Google 跟踪代码管理器事件。我在 Google 跟踪代码管理器的触发器视图中看到,我们可以为全局 JavaScript 变量等于某个值时设置触发器。但是,由于某种原因,此触发器从未触发。

我目前正在预览,并在进行所有更改后保存了我的更改(再次单击预览),但由于某种原因,GTM 没有触发触发器。

我创建了一个名为 "Screener Step" 的自定义变量,它具有类型 "JavaScript Variable" 和全局变量名称 "screenerStep"。当 "Screener Step" 等于“1”时触发。默认设置为 0。

我通过这样定义变量 "screenerStep" 来声明它是全局的:

window.screenerStep = 0;

我可以通过在控制台中键入 screenerStep 并验证它等于 1 来验证 screenerStep 实际上设置为 1

如果重要的话,我正在使用 AngularJS 在 $watch.

中设置 screenerStep 的值

提前谢谢你。

更新。 即使 screenerStep 初始化为触发条件 1,触发器也不会触发。

Update. 问题是因为触发器实际上是一个自定义事件,恰好有一个过滤器只在 screenerStep 等于时触发1。通过 document.dispatchEvent(new CustomEvent('testEvent')); 广播事件后,触发器确实触发了。在我想出更多的东西后,我将 post 一个正式的解决方案。

如果您希望 GTM 根据 JavaScript 变量的值触发,您需要执行以下操作:

首先,请阅读:https://developers.google.com/tag-manager/devguide

然后使用dataLayer发送自定义事件:

window.dataLayer.push(
  {'event': 'Your Custom Event'}
);

请注意,您必须先在代码中的某处将 dataLayer 初始化为空数组。如果您希望 dataLayer 在页面加载时可用,则 dataLayer 需要在 GTM 容器执行之前存在。

出于我的目的(事件),我刚刚在我的异步加载 javascript.

中初始化了 dataLayer

然后您可以过滤 GTM 触发器,使其仅在全局 JavaScript 变量等于特定值时触发。明确地说,您需要先发送一个自定义事件来指示 GTM 检查您的全局 JavaScript 变量的值。全局 JavaScript 变量在 GTM 中设置为变量 -> JavaScript 变量 -> 输入全局 JavaScript 变量的名称。

现在,您可能会想,对于您希望触发 GTM 标记的各种条件,只使用不同的事件名称可能会更好。这就是我最终选择的路径,它完全消除了对全局 JavaScript 变量的需要。然而,在某些情况下,从 JavaScript 中提取值可能会很有用。在这些情况下,我们可以像这样向自定义事件添加数据:

window.dataLayer.push(
  {'event': 'Custom Event'},
  {'attributes': {
    {'custom attribute 1': variableHere},
    {'custom attribute 2': anotherVariableHere},
    ...
  }
);

您也可以直接将变量推送到 dataLayer

window.dataLayer.push(
  {'custom variable 1': variableHere}
);