Javascript 谷歌标签管理器。如何防止以编程方式加载自定义标记?

Javascript 谷歌标签管理器。如何防止以编程方式加载自定义标记?,javascript,google-tag-manager,Javascript,Google Tag Manager,我在使用GTM(谷歌标签管理器)的网站上工作。 GTM包含一些在我的国家不允许的来自网站的脚本(标签)。它在控制台中导致错误,我想停止加载此标记。我没有访问GTM帐户的权限,所以我应该使用js。此脚本是自定义HTML标记,因为当我尝试以下代码时,它会停止加载: dataLayer = [{ 'gtm.blacklist':['html'] }]; 但它也停止加载其他自定义标记。 如何停止以编程方式加载某些自定义标记 不能通过编程方式阻止特定的自定义HTML。一个

我在使用GTM(谷歌标签管理器)的网站上工作。 GTM包含一些在我的国家不允许的来自网站的脚本(标签)。它在控制台中导致错误,我想停止加载此标记。我没有访问GTM帐户的权限,所以我应该使用js。此脚本是
自定义HTML标记
,因为当我尝试以下代码时,它会停止加载:

    dataLayer = [{
        'gtm.blacklist':['html']
    }];
但它也停止加载其他自定义标记。
如何停止以编程方式加载某些自定义标记

不能通过编程方式阻止特定的自定义HTML。一个原因是它毫无意义——“自定义HTML”意味着“在站点上下文中执行的任意代码”,因此代码可以简单地放入另一个HTML标记中并从那里运行

你不能控制在你的网站上运行的GTM实例(这实际上意味着你不能控制你的网站)不是谷歌可以以任何有意义的方式满足的用例(如果你控制GTM,那么只需删除标签)


如果您的意思是不允许某个来源的脚本,那么您可以研究(无论脚本是否从GTM或任何其他来源运行,这都会起作用)。然而,众所周知,CSP很难实现(虽然这只适用于有限的测试,而不适用于生产使用)。

我认为这是可以实现的。查看GTM代码,我们可以看到它使用insertBefore函数向网站添加脚本元素(目前,他们可以随时更改)。因此,从理论上讲,您可以向本机函数“添加”一些代码,并防止从特定源加载脚本。例如,您可以在加载GTM之前运行以下代码:

Node.prototype.insertBefore = (function() {
    var cached_function = Node.prototype.insertBefore;

    return function(script) {
        if(script && script.src.indexOf("www.somesource.com/script.js") !== -1){ //change to src you don't want to load on your page
            return false; //don't add the script
        }else{
            var result = cached_function.apply(this, arguments); // use .apply() to call native function

            return result;
        }
    };
})();
(代码取自:)


我没有测试这段代码,所以我不建议您在没有适当测试的情况下进行测试,或者您可能决定根本不进行测试(在测试之前,您可能想阅读:)。我同意Eike的回答,但我想说的是,可以通过编程防止加载自定义标记

黑名单html将阻止所有自定义脚本。这个特定的标签是从页面加载触发的,还是一个特定的触发器?有可能隔离触发器吗?@CarlK我是GTM新手,所以我不确定,但我在页面加载时遇到了这个控制台错误,所以应该由页面加载触发,对吗?很可能是页面加载。这仍然可能是一个触发的事件。您可以查看
window.dataLayer
,查看哪些事件已传递给GTM并确认非常感谢。我在你的答案中加了一个小的修正。因为
insertBefore
也调用不带
src
属性的元素,所以我们应该检查
src
属性是否存在。当然,在我从GTM帐户中删除该标记之前,我会将其用作快速修复。