提问人:Gamby 提问时间:5/5/2016 最后编辑:AdrianoGamby 更新时间:10/28/2023 访问量:30100
根据单个用户的决定禁用谷歌标签管理器(选择退出)[已关闭]
Disable google tag manager according to the decision of single users (opt-out) [closed]
问:
这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。
27 天前关闭。
在某些国家/地区(例如意大利),法律要求网站有义务提供/分析cookiedisable
enable
例如:Google 跟踪代码管理器。
但是,我仍然有一个问题:
为什么我不能简单地读取包含用户首选项的 cookie 服务器端,如果我找到一个给定的值(即“disable”),设置一个属性以能够有条件地包含(或不包含)GTM 脚本在我的 JSP 页面中?
答:
需要指出的是,GTM既不是跟踪工具,也不是本身设置任何cookie。
与编程相关的是,GTM 代码无法根据 cookie 禁用自身,因为需要加载 GTM 来检查 cookie 是否存在。
Cookie 仅作为 http 请求的一部分发送到设置了服务器的域;GTM 驻留在 Google 服务器上,该服务器将无权访问在您的网域中设置的 Cookie。因此,如果您的域上设置了选择退出 cookie,GTM 服务器将不会知道它。
Cookie 主要是一种客户端技术;GTM 通过将 JavaScript 注入您的页面来与 Cookie 进行交互,以便它在您的域上下文中运行,然后让脚本评估您的 Cookie 的内容(如果您设置了 Cookie 变量或自定义脚本)。此时,GTM 代码已加载。
这就是为什么您不能使用 cookie 来阻止 GTM 加载的原因;但是,您可以使用 cookie 来禁用 GTM 中的所有标签。如果这还不够好,你必须编写自己的逻辑来有条件地禁用GTM(你甚至可以在你的CMS中编写一个例程,不基于cookie呈现GTM代码 - 毕竟这是你自己的域,所以cookie数据会随着请求一起发送;你不能指望谷歌为你做这件事)。
GTM 不能自行设置 cookie(除非您使用设置 cookie 的脚本编写自定义 HTML 标签,这与通过内联代码执行此操作没有什么不同),因此我将假设您已经有一个称为“选择退出”的 cookie。该cookie中存储了什么值并不重要,我们只会检查它是否存在。
转到 GTM,转到“变量”部分,单击“新建”并选择“第一方 Cookie”。将其命名为“选择退出 Cookie”,并将名称字段设置为“选择退出”。救。现在,您有一个变量,用于检查选择退出 cookie,如果设置了该值,则返回一个值,如果 cookie 不存在,则返回“undefined”。
现在转到触发器部分,并创建一个类型为页面视图的新触发器。例如,称其为“选择退出触发器”。在“触发”部分,在第一个字段中选择“选择退出 Cookie”变量,将“不等于”设置为条件,将“未定义”设置为值(因此,在设置 cookie 时触发器的计算结果为 true)。
现在检查您的标签,并将“选择退出触发器”添加到您要在设置 cookie 时禁用的标签中。保存、发布。
唯一需要注意的是,网页浏览触发器可能会在网页浏览、DOM 就绪或页面加载时触发。在网页浏览时触发的异常触发器不会阻止触发设置为 DOM 就绪或页面加载的标记,因此您可能需要多个异常,加载过程的每个阶段一个异常。
评论
<script> if (condition) { $('<script>GTM script</' + 'script>').appendTo(document.body); } </script>
简而言之:
是的,您可以将此 / 选择保存在 上,并根据您的 .opt-in
opt-out
server side
JSP
如何
Html 格式
<span class="js-ga-opt-out">Disable GA - Server side solution</span>
<span class="js-ga-opt-in">Enable GA - Server side solution</span>
Java脚本
function optOutGoogleTracking(){
setCookie('_ga', undefined);
// AJAX call to your web service setting the relevant cookie
$.ajax({
url: <optOutGoogleTrackingUrl>,
type: 'GET',
data: { optOutGoogleTracking: true}
})
alert('disabling GA cookies');
window.location.reload();
}
function optInGoogleTracking(){
// AJAX call to your web service setting the relevant cookie
$.ajax({
url: <optOutGoogleTrackingUrl>,
type: 'GET',
data: { optOutGoogleTracking: false}
})
alert('enabling GA cookies');
window.location.reload();
}
$('html').on("click", ".js-ga-opt-out", function(){
optOutGoogleTracking();
});
$('html').on("click", ".js-ga-opt-in", function(){
optInGoogleTracking();
});
JSP的
在这里,我们假设您已经设置了名为 的属性的值。optOutGoogleTracking
存储位置由您决定,但可能在应用程序级别范围内,因为它在您的所有网站上都使用。
我假设您有一个自定义 JSP 标记,如此处所述,称为允许我访问此值。allThatJazz
<c:if test="${allThatJazz.optOutGoogleTracking==false}">
// put your Google Tag Manager script here
</c:if>
注意:我自己还没有实现这个
评论
简而言之
仅限 / / js-cookie
的解决方案,它“仅”部分适用于 GTM(Google Tag Manager),因为它有一个实现。请参阅下面的详细信息。Javascript
jQuery
<noscript>
如何
[HTML全
<span class="js-ga-opt-out">Disable GA - Javascript solution</span>
<span class="js-ga-opt-in">Enable GA - Javascript solution</span>
Java脚本
// note that setCookie(key, value) is a custom function
function optOutGoogleTracking(){
setCookie('_ga', undefined);
setCookie('optOutGoogleTracking', true);
alert('disabling GA cookies');
window.location.reload();
}
function optInGoogleTracking(){
setCookie('optOutGoogleTracking', false);
alert('enabling GA cookies');
window.location.reload();
}
$('html').on("click", ".js-ga-opt-out", function(){
optOutGoogleTracking();
});
$('html').on("click", ".js-ga-opt-in", function(){
optInGoogleTracking();
});
Google 跟踪代码管理器脚本
请注意,不能使用 Javascript 有条件地跳过标记中的内容。<noscript></noscript>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js.cookie.min.js"></script>
<!-- Google Tag Manager -->
<noscript>
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-xxxxx"
height="0" width="0" style="display:none;visibility:hidden"></iframe>
</noscript>
<script>
if(Cookies.get('optOutGoogleTracking') === 'false') { // here is your condition
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-xxxxx');
}
</script>
<!-- End Google Tag Manager -->
我的理解是,该标签存在于禁用 Javascript 的情况下。然后,跟踪将通过 iframe 完成。<noscript>
不过,对于大多数情况来说,这个解决方案可能“足够好”。
这在法律上是否合规?可能不是。
评论
Cookies
Cookies.get('optOutGoogleTracking')
js-cookie
Cookies
评论