Javascript - 用 Google 标签管理器的本机 js 代码问题替换循环

Javascript - replace loop with native js code problem for Google Tag Manager

为我的无知提前道歉。我已经搜索了该网站,但没有任何运气。

与其通过 GA 的管理界面手动输入每个主机名,不如利用 GTM 中的以下 JS 函数来定义排除列表(var referrals),create/compare 传入 {{Referrer}}(.exec,.测试方法),然后将 {{Referrer}} 清空(如果它在列表中),或者如果未找到匹配项则让它不加修改地传递给 GA:

function()
{
  var referrals = [
    'domain_one.com',
    'domain_two.com',
    'domain_three.refer.com',
    'store.domain_three.refer.com'
  ];
  var hname = new RegExp('https?://([^/:]+)').exec({{Referrer}});
  if (hname) {
    for (var i = referrals.length; i--;) {
      if (new RegExp(referrals[i] + '$').test(hname[1])) {
        return null;
      }
    }
  }
  return {{Referrer}};
}

我将代码发送给开发人员以征求反馈,他建议将 for 循环替换为此(直接替换循环):

if (referrals.find(function(referral) { return hname[1].includes(referral); })) { return null; } else { return {{ Referrer }};

我尝试这样做:

function() 
{
  var referrals = [
    'domain_one.com',
    'domain_two.com',
    'domain_three.refer.com',
    'store.domain_three.refer.com'
  ];
  var hname = new RegExp('https?://([^/:]+)').exec({{ Referrer }});
  if (hname) { 
    if (referrals.find(function(referral) { return hname[1].includes(referral); })) { return null; } else { return {{ Referrer }};  
}

尝试在 GTM 中发布此内容时,我遇到了 {{Referrer}} 的解析错误和未引用变量错误。

如果有人有任何反馈,我将非常感谢。

呃...您的开发人员不了解 GTM 的语法。所以现在要让它工作,要么开发人员需要了解 GTM 的变量语法,要么你需要了解 JS,所以我建议你使用你的旧代码。最好使用你理解的代码,而不是你无法维护的代码。

如果您仍想使用它,请尝试从变量引用中删除空格。

而且你忘了关闭 else 从句:else { return {{ Referrer }};} 再一次关闭外部 if... else { return {{ Referrer }};}}

现在看起来一团糟,所以在这里,试试这个:

function() {
  var referrals = [
    'domain_one.com',
    'domain_two.com',
    'domain_three.refer.com',
    'store.domain_three.refer.com'
  ];
  if (/https?:\/\/([^\/:]+)/i.test({{Referrer}})) {
    if (referrals.find(function (referral) { return hname[1].includes(referral); })) { return null; } else { return {{Referrer}}; }
  }
}