我正在尝试根据全局JavaScript变量的值来弄清楚如何触发Google跟踪代码管理器事件。我在Google跟踪代码管理器的触发器视图中看到,我们可以为全局JavaScript变量等于某个值时设置触发器。但是,出于某种原因,这个触发器永远不会触发。
我正在预览,并在完成所有更改后保存了我的更改(再次单击预览),但由于某种原因,GTM没有触发触发器。
我创建了一个名为“Screener Step”的自定义变量,其类型为“JavaScript Variable”,全局变量名称为“screenerStep”。当“筛选步长”等于“1”时,触发器被设置为。默认设置为0。
我已经将变量“screenerStep”声明为全局变量,如下所示:
window.screenerStep = 0
;
我可以通过在控制台中输入screenerStep
并验证它是否等于1来验证1
确实设置为screenerStep
。
如果重要,我使用AngularJS在screenerStep
内设置$watch
的值。
提前谢谢。
更新。即使screenerStep
初始化为1
这是触发条件,触发也不会触发。
更新。问题是由于触发器实际上是一个自定义事件,恰好有一个过滤器仅在screenerStep
等于1
时触发。在通过document.dispatchEvent(new CustomEvent('testEvent'));
广播事件后,触发器触发了。在我找到更多的东西后,我会发布一个正式的解决方案。
答案 0 :(得分:0)
如果您希望GTM根据JavaScript变量的值触发,则需要执行以下操作:
首先,请阅读:https://developers.google.com/tag-manager/devguide
然后使用dataLayer
分派自定义事件:
window.dataLayer.push(
{'event': 'Your Custom Event'}
);
注意,您必须首先将dataLayer
初始化为代码中的某个空数组。如果您希望dataLayer
在页面加载时可用,则需要在GTM容器执行之前存在dataLayer
。
出于我的目的(事件),我刚刚在异步加载的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}
);