即使两个条件都为真,GTM标签也不会触发

时间:2017-01-09 15:59:53

标签: javascript google-tag-manager

当以下两条规则成立时,我尝试触发GTM标记: rules image

自定义js变量的内容是:



function () {
  setTimeout(function () {
    var thankyouMessage = document.querySelector("#newsletter-success").innerHTML === "Thank you for your subscription.";
    console.log('thankyouMessage', thankyouMessage);
    return thankyouMessage;
  }, 2000)
}




目前标签未被触发。 每当我删除自定义规则时,标记都会被触发,但是当我添加它时,我可以看到' true'打印到我的控制台,这意味着自定义规则正确运行。 我还尝试使用不同的自定义规则,该规则不涉及“设置时间”和#39; setTimeout'它起作用了。但我必须使用超时,因为我试图捕获的事件不会立即发生。

如何正确触发标签?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以将代码编辑为自定义html标记,而不是使用自定义的javascript变量。

“自定义HTML标记”将由“所有元素单击触发器”触发,其中“单击类等于”按钮。 (你的同一个触发器没有ThanksForSub ..检查)。

自定义HTML标记将调用超时函数,而不是返回一个值,它将执行dataLayer.push并将结果包含在其中。

然后,您将使用此事件和dataLayer值在您希望最初触发的标记上创建自定义事件触发器。

为了访问传递的值,您需要使用'成功'来创建用户定义的可变数据层类型。作为关键。

自定义HTML标记脚本。

<script>(function() {
try {
    setTimeout(function () {
        var thankyouMessage = false;
        var thankyouMessageObj = document.querySelector("#newsletter-success");
        if(thankyouMessageObj && typeof thankyouMessageObj.innerHTML != 'undefined') {
            thankyouMessage = thankyouMessageObj.innerHTML === "Thank you for your subscription.";
        }
        console.log('thankyouMessage', thankyouMessage);
        //return thankyouMessage;
        if(typeof window.dataLayer != 'undefined') {
            window.dataLayer.push({
               'event' : 'newsleter.submit',
               'success' :  thankyouMessage
            });
        }
  }, 2000)
} catch (e) {
}})();</script>