更干净的页面。更少的跟踪器。仅本地运行。
GetBlocked! 是一款轻量级、仅本地运行的 Chrome 扩展,通过拦截已知跟踪器请求、清理跟踪链接并解释跟踪尝试,帮助减少常见的第三方网站跟踪。可选的实验性诱饵模式(Decoy Mode)则相反:放行已知跟踪器请求,同时将受支持的分析标识符替换为一个一致的虚假浏览器会话配置文件。
它被构建为一个体积小巧、可审查的 Manifest V3 项目,面向希望获得友好隐私工具的用户,以及希望提交快速、实用拉取请求的贡献者。
declarativeNetRequest 拦截一份精选的已知第三方跟踪器域名初始列表。utm_source、fbclid、gclid、dclid、mc_cid 及类似的营销活动 ID。ref 参数。chrome.storage.local 中。chrome.storage.session 中。
GetBlocked! 拦截一份精选的已知第三方跟踪器域名和跟踪 URL 参数初始列表。
当前覆盖范围包括:
跟踪器列表有意保持保守。规则仅限于第三方请求,以减少网站损坏。
当实验性诱饵模式开启时,主要的跟踪器拦截规则会被禁用,但跟踪参数清理仍然启用。对同一目录中域名的页面级 fetch、XMLHttpRequest 和 navigator.sendBeacon 调用会在可行的情况下被拦截。
诱饵模式默认关闭。使用弹出窗口中明确标注的 Experimental 开关来启用它。它适用于所有网站:从一个网站的弹出窗口开启它,会在所有地方暂停目录跟踪器拦截,包括其他标签页。URL 清理保持开启。从任何网站的弹出窗口关闭它,即可在所有地方恢复拦截;全局偏好会在浏览器重启后保持保存。
启用后:
1(基于目录的第三方跟踪器拦截器)已禁用。1000(针对顶层导航的跟踪参数清理)保持启用。fetch、XMLHttpRequest 和 navigator.sendBeacon 发起的已知跟踪器请求会在页面的主 JavaScript 世界中接受检查。诱骗模式不会创建请求,也绝不会更改事件名称、事件类型、顺序或交易 ID、产品、价格、金额、货币、转化、购买或广告点击字段。现有的事务性事件不会被虚构或重新分类。由于跟踪器请求被允许到达其目的地,这些服务仍可能观察到用户的 IP 地址和其他网络元数据。参见诱骗模式详情。
GetBlocked! 是:
GetBlocked! 不会将浏览数据发送到任何服务器。该扩展使用:
declarativeNetRequest 进行由 Chrome 管理的本地请求拦截。chrome.storage.local 存储页面报告数据。chrome.storage.session 存储内存中的诱骗模式虚假配置文件。没有扩展自有的分析、遥测端点、远程日志或捆绑的远程资源。在诱骗模式下,页面现有的跟踪器请求会被有意放行,并替换受支持的标识符;GetBlocked! 不会发起额外的跟踪器请求。
chrome://extensions。生产构建避免了仅调试用的 DNR 反馈权限。在普通模式下,弹窗和徽章会报告一个此页面上估计的跟踪器资源数量,该数量源自本地在页面中检测到的唯一已知跟踪器资源 URL。这是对拦截规则所针对的跟踪器资源的估计,而非 Chrome 确认的已匹配或已拦截网络请求数。在诱骗模式下,徽章则改为反映此页面上被诱骗的数量,即扩展实际修改的受支持请求负载数。URL 清理活动会单独报告。普通模式下的拦截和 URL 清理由 MV3 declarativeNetRequest 强制执行;在诱骗模式下,仅拦截规则被禁用。
初次接触扩展?浏览开放的适合新手的议题 ,寻找带有起始文件和验收标准的小型文档、可访问性和测试任务。阅读贡献指南,在开始处理某个议题时发表评论,并提交一个聚焦的 PR。欢迎草稿 PR。
最简单的贡献方式是添加一个跟踪器域名。
npm run generate:rules。npm run test:evidence。欢迎提交 PR,用于新增跟踪器域名、失效站点测试、UI 优化、文档和测试改进。提交小型、聚焦的 PR 前无需事先询问。
关于常见的扩展和跟踪术语,请参阅 GetBlocked! 术语表。
一个额外的 社区域名列表 开关默认关闭。它启用了来自 Dev2023-Op 分支的 67 个社区报告的不安全域名。这些报告未经核实,可能会拦截合法站点。启用后,该列表会独立于诱饵模式拦截访问和请求。它本地打包,不会自动更新。有关来源、限制以及需要编辑的确切文件,请参阅社区列表指南。
跟踪器域名维护在 shared/tracker-catalog.json 中。
每个跟踪器条目包含:
domaincategorylabelnotes跟踪 URL 参数维护在 shared/tracking-params.json 中。
更改目录或跟踪参数列表后,重新生成派生的扩展文件:
npm run generate:rules
这会更新:
declarativeNetRequest 使用。除非同时更新生成器或源目录,否则不要手动编辑生成的规则/配置。
运行与 CI 使用的相同的本地验证层:
npm run check
这会重新生成规则、运行证据测试夹具、检查 JavaScript 语法、解析 JSON 数据文件、验证生成的文件是否同步,并运行隐私/安全防护检查。
有用的单项检查:
npm run generate:rules
npm run test:evidence
npm run test:decoy
npm run check:syntax
npm run check:json
npm run check:generated
npm run check:safety
使用兼容的 Chromium 系列浏览器运行自动化浏览器测试:
npm run test:browser
这会启动 Chrome 并加载未打包的扩展,导航到带有常见跟踪 URL 参数的
test/manual-test.html,并验证:
utm_source、fbclid、gclid 等)会被扩展的 declarativeNetRequest 重定向规则从
最终页面 URL 中移除。无需任何 npm 包。该测试仅使用 Node.js 内置模块和 Chrome 的
远程调试协议(CDP)。某些品牌浏览器构建会忽略
--load-extension;如果找不到兼容的浏览器,或未打包的扩展
未能加载,本地默认模式会以退出码 0 退出并打印 SKIP。
CI 会安装 Chrome for Testing,并在单独的 browser 任务中运行
npm run test:browser -- --required。必需模式在浏览器测试无法
运行时以非零码退出。将 CHROME_PATH 设置为兼容的可执行文件,即可在本地运行相同的检查。
使用环境变量覆盖默认值:
| 变量 | 默认值 | 用途 |
|---|---|---|
CHROME_PATH | 自动检测 | 兼容的 Chromium 系列可执行文件路径 |
TEST_PORT | 8765 | 本地静态文件服务器端口 |
DEBUG_PORT | 9333 | Chrome CDP 远程调试端口 |
加载未打包的扩展后,从此文件夹启动一个简单的本地服务器:
python -m http.server 8080
然后打开:
http://localhost:8080/test/manual-test.html?utm_source=demo&utm_medium=test&fbclid=manual
启用 GetBlocked! 并关闭诱饵模式后,跟踪参数应从页面 URL 中移除,已知的第三方跟踪器请求应被阻止。弹窗应显示页面级跟踪器活动。
然后在弹窗中开启 诱饵模式(实验性) 并重新加载测试页面。URL 清理应继续进行,测试页面中 fetch、XHR 和 beacon 调用里受支持的标识符应被替换,此页面上的诱饵 计数应增加。跟踪器请求本身可能仍会失败,因为示例端点会拒绝测试/CORS 流量;该计数器记录的是本地替换尝试。再次关闭诱饵模式以恢复正常阻止。
MIT 许可证。参见 LICENSE。