如何在全局 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}
);
我正在尝试了解如何根据全局 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}
);