如何根据 HTML 中包含的特定脚本排除 Google 标签管理器中的标签

How to exclude tag in Google Tag Manager based on specific script include in HTML

我必须修改我们的 Google 跟踪代码管理器容器,而且我对 GTM 还不是很了解。 IE8 和使用 Fusion Charts 的页面存在问题。通过这种组合,我在 gtm.js 中有一个 javascript 错误,我发现它在表单提交侦听器中。所以我想我会在那个标签上添加一个例外。该例外将是 "If isIE8 and hasFusionChartsControl"。这两个是我在 GTM 中定义的 "Custom Javascript" 类型的变量:

contientFusionCharts :

function() { 
  var file = "fusioncharts.js";
  var scripts = document.getElementsByTagName("script");
  for(var i = 0; i < scripts.length; i++) {
    if (scripts[i].src != undefined && scripts[i].src.substr(scripts[i].src.length-file.length) == file) {
      return true;
    }
  }

  return false;
}

estIE8 :

function() {
  var isIE = !!document.documentMode; // At least IE6
  var rv = -1; // Return value assumes failure.
  if (isIE) {
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.);
    }
  }

  return (rv > -1 && rv <= 8.0);
}

我已经测试了那些 javascript 功能,它们在 IE8 上运行良好。现在我已经定义了一个触发器:

现在我的标签,我只添加了例外:

我觉得这一切都很好,但仍然无法正常工作。我可以证明这个标签有问题,因为我已经为特定页面创建了一个看起来 URL 的异常,当我浏览这个特定页面时,js 错误不再出现。但我不想创建指定特定页面的异常,因为这是一个 Sharepoint 站点,用户可以根据需要创建页面。所以我不想每次他们在页面中使用 Fusion Charts 控件时都必须添加例外。所以我认为寻找适合 Fusion Charts 的特定 html 标签是个好主意,我得出的结论是寻找包含 fusioncharts.js 的脚本是个好主意。

如果您能解释为什么它不起作用以及替代解决方案,那就太好了!谢谢!

为了将来参考,这是我在 google 产品论坛上从 Simo Ahava 收到的答案:

Hey

Exceptions only block the event you've set them up for. So your exception will ONLY block the "Window Loaded" event. Is your Tag firing on that event? If your Tag is firing on the "All Pages" event, it's using the Page View, and not the Window Loaded event, so you need to change your Exception trigger accordingly to match the event of the Tag.

OR you can just create a global exception, which blocks all events that match the other conditions. You do this by using a Custom Event Trigger, and set the event name to .* (and check RegEx).

http://www.simoahava.com/gtm-tips/block-your-tags-with-trigger-exceptions/

Simo

我选择使用事件名称为 .* 的自定义事件触发器创建全局异常(使用 RegEx)并且效果很好。