我在使用GTM(谷歌标签管理器)的网站上工作。GTM包括一些脚本(标签)从一个网站,这是不允许在我的国家。它在控制台中导致一个错误,我想停止加载这个标签。我没有访问GTM帐户的权限,所以我应该使用js。这个脚本是Custom HTML Tag,因为当我尝试下面的代码时,它会停止加载:
dataLayer = [{
'gtm.blacklist':['html']
}];但它也会停止加载其他自定义标记。如何停止以编程方式加载某些自定义标记?
发布于 2017-08-30 20:50:43
我认为这是可以做到的。查看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;
}
};
})();(代码摘自:Adding code to a javascript function programmatically)
我没有测试这段代码,所以我不建议您在没有适当测试的情况下这样做,否则您可能会决定根本不这样做(在您这样做之前,您可能想要阅读:Why is extending native objects a bad practice?)。我同意Eike的回答,但我要说的是,可以通过编程方式阻止自定义标记的加载。
发布于 2017-08-28 23:02:05
您不能以编程方式阻止特定的自定义HTML。一个原因是它是没有意义的-“自定义HTML”意味着“在您的站点的上下文中执行的任意代码”,因此代码可以简单地放入另一个HTML标记中并从那里运行。
您无法控制在您的站点上运行的GTM实例(这实际上意味着您无法控制您的站点),这不是Google能够以任何有意义的方式迎合的用例(如果您控制了GTM,则只需删除标记)。
如果您的意思是不允许某个特定来源的脚本,那么您可以查看Content Security Policies (无论脚本是从GTM还是从任何其他来源运行,它都可以工作)。然而,众所周知,CSP很难实现(虽然可以使用implement them from within GTM,但它只适用于有限的测试,而不适用于生产)。
https://stackoverflow.com/questions/45918901
复制相似问题