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

时间:2016-08-03 19:39:10

标签: javascript angularjs google-analytics google-tag-manager

我正在尝试根据全局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'));广播事件后,触发器触发了。在我找到更多的东西后,我会发布一个正式的解决方案。

1 个答案:

答案 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}
);