如何在全局JavaScript变量等于某个值时触发Google标记管理器事件

如何在全局JavaScript变量等于某个值时触发Google标记管理器事件,javascript,angularjs,google-analytics,google-tag-manager,Javascript,Angularjs,Google Analytics,Google Tag Manager,我试图找出如何根据全局JavaScript变量的值触发Google标记管理器事件。我在Google Tag Manager的触发器视图中看到,我们可以为全局JavaScript变量等于某个值时设置触发器。然而,由于某些原因,该触发器从未触发 我目前正在预览,并在进行所有更改后保存了更改(再次单击预览),但由于某些原因,GTM没有触发触发 我创建了一个名为“Screener步骤”的自定义变量,它的类型为“JavaScript变量”,全局变量名为“screenerStep”。当“筛选步骤”等于“1”

我试图找出如何根据全局JavaScript变量的值触发Google标记管理器事件。我在Google Tag Manager的触发器视图中看到,我们可以为全局JavaScript变量等于某个值时设置触发器。然而,由于某些原因,该触发器从未触发

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

我创建了一个名为“Screener步骤”的自定义变量,它的类型为“JavaScript变量”,全局变量名为“screenerStep”。当“筛选步骤”等于“1”时,触发器设置为。默认设置为0

我通过如下定义将变量“screenerStep”声明为全局变量:

window.screenerStep=0

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

如果有必要,我将使用AngularJS在
$watch
中设置
screenerStep
的值

先谢谢你

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


更新。问题是因为触发器实际上是一个自定义事件,当
screenerStep
等于
1
时,恰好有一个筛选器只触发该事件。通过
document.dispatchEvent(新的CustomEvent('testEvent'))广播事件后触发器确实触发了。在我弄明白更多事情之后,我将发布一个正式的解决方案。

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

首先,阅读以下内容:

然后使用
数据层
发送自定义事件:

window.dataLayer.push(
  {'event': 'Your Custom Event'}
);
注意,首先必须将
数据层
初始化为代码中的某个空数组。如果希望
dataLayer
在页面加载时可用,
dataLayer
需要在GTM容器执行之前存在

出于我的目的(事件),我只是在异步加载的javascript中初始化了数据层

然后,您可以过滤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},
    ...
  }
);
您也可以直接将变量推送到
数据层

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