【问题标题】:GTM tag not firing even when both conditions are true即使两个条件都为真,GTM 代码也不会触发
【发布时间】:2017-01-09 15:59:53
【问题描述】:

我正在尝试在以下两条规则为真时触发 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”,这意味着自定义规则运行正确。 我还尝试使用不涉及“setTimeout”的不同自定义规则并且它有效。但我必须使用超时,因为我试图捕捉的事件不会立即发生。

如何正确触发代码?

谢谢。

【问题讨论】:

  • 嗨,Itai。这里的问题是thankyouMessage 被返回给setTimeout 内的函数,而不是外部函数。我手头没有延迟自定义 js 变量的解决方案;但如果我处于您的位置,我会考虑将此代码移至您的网站 - 并将内容推送到 GTM dataLayer。这对您来说是一个可行的选择吗?
  • 不,我无权访问代码。但是感谢您解释问题

标签: javascript google-tag-manager


【解决方案1】:

您可以将代码编辑为自定义 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多