如何在获得同意前阻止脚本:三种方法对比

问题:标签触发得太早

同意横幅只有在其背后的标签尊重访问者的选择时才有效。最常见的失败很简单:横幅出现了,但在任何人点击之前,分析和广告脚本已经加载并设置了标识符。要解决这个问题,就需要在获得同意之前阻止脚本。有三种可行的方法。

方法一:改写脚本类型

只有当script元素的type是JavaScript类型时,浏览器才会执行它。如果你把type改为text/plain,浏览器就会忽略该脚本。然后你添加一个数据属性,记录该脚本属于哪个同意类别:

适用于:模板中少数已知的内联或外部脚本。注意:由其他脚本注入的脚本不会经过你的模板,因此永远不会被改写。

方法二:在标签管理器中控制标签

如果你的标签位于Google Tag Manager或类似工具中,你可以让容器保留在页面上,并通过感知同意状态的触发器来控制触发。每个标签都被赋予一项同意要求,只有当相应的同意状态被授予时,标签管理器才会触发它。最大的优势是集中控制:营销人员无需改动模板就能添加标签,而且规则会跟随标签。

适用于:拥有大量营销标签的网站。注意:位于容器之外的硬编码脚本,以及自行加载更多脚本的自定义HTML标签。

方法三:在获得同意后动态加载脚本

在这种方式下,你把script标签从页面中完全移除,并编写一个函数,仅在同意事件之后才注入它们。对于单页应用,以及希望完全掌控的开发者来说,这是最干净的选择:

  1. 监听来自你的CMP的同意回调。
  2. 检查哪些类别已被授予。
  3. 创建一个script元素,设置其来源,并将其追加到文档中。
  4. 在脚本的load处理程序中运行任何初始化代码。

适用于:有构建步骤的现代应用。注意:别忘了处理回访访问者,其已存储的选择必须在页面加载时触发加载,而无需新的点击。

处理撤回

在获得同意前阻止只完成了一半的工作。如果访问者之后撤回同意,请停止调用这些工具,并确保它们不再继续读取或写入标识符。从页面中移除脚本并不会移除已在内存中的代码,所以撤回后重新加载页面往往是最简单可靠的做法。

你应该选择哪一种?

如何测试

  1. 打开一个已清除缓存的隐私窗口。
  2. 在加载页面之前,先打开浏览器开发者工具的Network和Application标签页。
  3. 加载页面,且不要碰横幅。确认没有发送任何分析或广告请求,也没有出现相关的Cookie或存储项。
  4. 只接受一个类别,并确认只有对应的脚本被加载。
  5. 拒绝全部,重新加载,并重复第一次检查。
  6. 撤回同意,并验证上述行为。

FlexyConsent的定位

FlexyConsent支持IAB TCF 2.4和Google Consent Mode v2,并且是经Google认证的CMP(CMP ID 317)。无论你选择哪种拦截方法,横幅的职责都是给你的代码一个关于访问者选择的明确信号。确保每个脚本都遵守该信号,则是你的职责。

要点回顾

← 博客 阅读全部 →