KakapoWP KakapoWP
登录 免费试用
帮助中心/Consent/脚本拦截:插件究竟做了什么

脚本拦截:插件究竟做了什么

适用于:Kakapo Consent· 6 分钟阅读

这里说的拦截是指:插件会在页面到达浏览器之前,改写已经生成好的页面。被中和的脚本虽然还留在源码里,但既不会加载也不会执行。本页说明这一过程在技术上发生了什么,以及边界在哪里。

输出页面时会发生什么

如果没有相应的同意,插件会在页面上加一层输出缓冲。凡是地址中包含被拦截主机模式的脚本元素,都会失去自己的 type 属性,改为 type="text/plain",原始地址则被移入一个 data 属性。外部样式表会从 rel="stylesheet" 改为带 as="style" 的 rel="preload",地址同样被移入一个 data 属性。访客做出决定后,前端会把结果报告给服务器、写入 Cookie 并重新加载页面——此后服务器就会原样输出,不再改写。

<script type="text/plain" data-kwpc-src="…">

被拦截主机列表的来源

  • 每一个已采集、处于启用状态,并归入“统计”、“营销”或“媒体 & 外部内容”的服务
  • “自定义拦截规则”卡片中的每个模式——始终会被拦截的额外主机模式
  • 若两者都为空,则改用随附的已知跟踪器主机列表,涵盖统计和营销两个分类
  • 若打开“在获得同意前拦截 Google Fonts”,还会加上 fonts.googleapis.com 和 fonts.gstatic.com
  • 归入“必要”、“功能性”和“其他”的服务从不出现在这份列表上
  1. 打开“Kakapo Consent”,在“规则”分组中选择“资源”(德语:„Ressourcen“)。
  2. 检查“脚本拦截已启用”开关——全新安装时它是打开的。
  3. 用“添加规则”补充一个自定义的主机模式,例如 tracker.example.com。
  4. 在“当前被拦截的主机”卡片中查看哪些主机正因何种来源被拦截。
  5. 对于插件以自有名称排入队列的脚本,在“Handle 规则”卡片中每行填写一条规则,格式为 handle、竖线、分类。
google-analytics | statistik

额外的层次与边界

  • 脚本拦截不会拆掉嵌入的框架。为此同一面板中提供了“拦截嵌入内容”开关:它会在输出之前把未获同意的 iframe 换成一个占位框;原始标记以编码形式一同传输,直到点击时才被放回。不可见的计数框架(高度或宽度为 0、display:none、aria-hidden)保持原样
  • 通过 wp_add_inline_script 挂到某个 handle 上的内联脚本会保留下来——它们在标记中没有自己的 handle
  • WooCommerce:没有“统计”的同意时,wc-cart-fragments、wc-analytics 和 woocommerce-analytics 会被摘除;没有“营销”的同意时,则是 wc-marketing 和 woocommerce-marketing 这两个脚本
  • Google Fonts 也可以改为本地自托管。这时只有真正保存在本地的字体族才会被改写;如果下载失败,原始的引入方式会保持不变
  • “条件内容”区块起作用的时点更早:没有同意时,它的内容根本不会被渲染,而是输出一个替代方框

什么情况下完全不拦截

  • 开关“CMP 已启用”处于关闭状态
  • 所访问的域名不在“域名”(德语:„Domains“)下的列表中(列表为空表示:处处生效)
  • 模式设为“仅提示”
  • “排除的 URL”或“排除的 User Agent”下有某个模式命中
  • “预览模式”处于启用状态,而访客不是已登录的管理员
  • “地理定位——仅欧盟/欧洲经济区”处于启用状态,而服务器报告的国家在其之外
  • 访客选择了“全部接受”
服务器端的每一个判断,都以一个经过签名的 Cookie 为准;该 Cookie 只由服务器签发,JavaScript 无法读取。签名不匹配,或内嵌其中的期限已过,就视为没有同意并予以拦截。已经作出决定的访客所访问的页面,会被排除在页面缓存之外。
kwpc_auth
这篇文章对您有帮助吗?