【问题标题】:Google Tag Manager custom JavaScript errrorGoogle 跟踪代码管理器自定义 JavaScript 错误
【发布时间】:2015-12-21 18:02:00
【问题描述】:

我已经返回下面的 JavaScript 函数来读取 cookie 名称和值。当我在 Chrome 和 Firefox 浏览器控制台中使用脚本时,我能够获取名称和值。

                  getCookie('xyz') ; 

              function getCookie(name)
               {
            var re = new RegExp(name + "=([^;]+)");
            var value = re.exec(document.cookie);
         return (value != null) ? unescape(value[1]) : null;
            }

但是当我通过使用自定义 JavaScript 变量在 Google 跟踪代码管理器中使用相同的代码时,我收到错误“括号(必需”。

我无法弄清楚什么是错误,因为此代码在除 Google 跟踪代码管理器之外的任何地方都运行。

【问题讨论】:

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


    【解决方案1】:

    解决方案是使用内置的“Cookie”变量(转到变量、新建、第一方 Cookie,输入变量名称并在配置中输入 cookie 的名称)。无需国产解决方案。

    为了严格回答这个问题,自定义的 javascript 变量必须写成带有返回值的匿名函数:

    function() {
    return "something";
    }
    

    我确信有一种解决方法可以传递参数(即 cookie 名称),但这通常不是使用自定义 javascript 变量的方式,您的用例不需要这个。

    如果你坚持使用你的函数,你总是可以通过自定义 javascript 变量返回它:

    function() {
    return function (name) {
                var re = new RegExp(name + "=([^;]+)");
                var value = re.exec(document.cookie);
             return (value != null) ? unescape(value[1]) : null;
                }
    }
    

    将其存储在名为 getCookie 的自定义 javascript 变量中,并通过 {{getCookie}}('xyz') 在自定义 HTML 标记中访问。不是一个好主意,但可能。

    【讨论】:

      【解决方案2】:

      我通常通过自定义 HTML 标记处理 cookie 集和获取,因为我相信自定义 Javascript 需要返回值。所以大致上是这样的:

      <script>
      (function() {
      
      function getCookie(name) {
          var nameEQ = name + "=";
          var ca = document.cookie.split(';');
          for(var i=0;i < ca.length;i++) {
              var c = ca[i];
              while (c.charAt(0)==' ') c = c.substring(1,c.length);
              if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
          }
          return null;
      }
      
      console.log(getCookie("xyz"));
      </script>
      
      })();
      

      每当触发标签的触发器时,以上内容都会向控制台输出一个名为 xyz 的 cookie 值的日志。

      如果您想在 GTM 中存储和使用此 cookie 值,则需要使用 cookie 变量或通过 dataLayer 传递并存储此变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 2022-06-15
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多