Show HN: I made a tool that prevents websites from tracking you
摘要
该项目是一款小巧的 Chrome Manifest V3 扩展,专为减少第三方网站追踪设计。它使用 declarativeNetRequest 本地阻挡已知追踪域名,清理 utm source、fbclid、gclid 等追踪参数,并在页面上检测可见的像素、脚本、iframe 等追踪信号。扩展本地存储报告数据(chrome.storage.local),弹出窗口展示已阻挡、已清理的链接和检测到的类别。作者强调保守规则(仅限第三方请求)、纯本地运行、无遥测或远程资产、开源可审查,并列出当前覆盖的追踪类别如分析、广告、社交像素等。扩展不阻挡每种追踪、不消除匿名性、不影响登录后追踪,也不替代全面广告拦截器。安装方式为本地 unpacked 加载,贡献只需编辑 tracker-catalog.json 添加域名即可快速运行测试。
荐读理由
用 manifest v3 declarativeNetRequest 在 manifest v3 项目里本地只阻塞已知第三方追踪域名和参数,加上本地 chrome.storage.local 报告数据,符合 AI 工程项目对轻量隐私工具的需求,可直接迁移
原文
GetBlocked!
Cleaner pages. Fewer trackers. Local-only.
GetBlocked! is a lightweight, local-only Chrome extension that helps reduce common third-party website tracking by blocking known tracker requests, cleaning tracking links, and explaining tracking attempts.
It is built as a small, inspectable Manifest V3 project for people who want a friendly privacy tool and for contributors who want quick, useful pull requests.
What GetBlocked! Does
Blocks a curated starter list of known third-party tracker domains using Chrome
declarativeNetRequest.Cleans common tracking URL parameters such as
utm_source,fbclid,gclid,dclid,mc_cid, and similar campaign IDs.Detects visible tracking attempts such as pixels, suspicious scripts, tracking iframes, and tracking links.
Shows a compact popup report with:
Blocked on this page
Tracking links cleaned
Visible tracking attempts detected
Detected categories
Keeps report data local in
chrome.storage.local.
What GetBlocked! Can Block
GetBlocked! blocks a curated starter list of known third-party tracker domains and tracking URL parameters.
Current coverage includes:
Analytics trackers
Ad and retargeting trackers
Social media pixels
Session replay and heatmap tools
Affiliate and attribution trackers
Email marketing trackers
Tracking URL parameters
The tracker list is intentionally conservative. Rules are limited to third-party requests to reduce website breakage.
What GetBlocked! Cannot Do
It does not block every tracker.
It does not make users anonymous.
It does not stop tracking after logging into an account.
It does not stop server-side tracking.
It does not fully prevent advanced fingerprinting.
It is not meant to replace full-featured ad blockers.
How GetBlocked! Is Different
GetBlocked! is:
Lightweight: small ruleset, simple popup, minimal moving parts.
Local-only: no external analytics, telemetry, or remote logging.
Open source: the rules, popup, and generation scripts are inspectable.
Educational: categories and wording are designed to explain common tracking clearly.
Beginner-friendly: small PRs can improve the tracker catalog, docs, tests, or UI.
Not a replacement for full ad blockers: it focuses on common trackers and clear explanations.
Why All Data Stays Local
GetBlocked! does not send browsing data to any server. The extension uses:
declarativeNetRequestfor local Chrome-managed request blocking.chrome.storage.localfor page report data.A content script that scans the current page locally for visible tracking signals.
There are no external analytics, telemetry endpoints, remote logs, or bundled remote assets in the extension.
Install Locally In Chrome
Download or clone this repository.
Open
chrome://extensions.Turn on Developer mode.
Choose Load unpacked.
Select the GetBlocked! project folder.
Pin GetBlocked! and open the popup on normal web pages.
The production build avoids debug-only DNR feedback permissions. The popup uses local page signals plus Chrome's production DNR action-count badge as a page-level estimate, while blocking and URL-cleaning rules remain enforced by MV3 declarativeNetRequest.
Contribute In 10 Minutes
The easiest way to contribute is to add one tracker domain.
Add one fixture in test/tracker-test-set.json.
Run
npm run generate:rules.Run
npm run test:evidence.Open a PR.
PRs are welcome for tracker-domain additions, broken-site tests, UI polish, docs, and test improvements. You do not need to ask before opening a small, focused PR.
How The Tracker Catalog Works
Tracker domains are maintained in shared/tracker-catalog.json.
Each tracker entry includes:
domaincategorylabelnotes
Tracking URL parameters are maintained in shared/tracking-params.json.
After changing the catalog or tracking parameter list, regenerate the derived extension files:
npm run generate:rules
This updates:
rules/rules.json, used by Chrome
declarativeNetRequest.shared/config.js, used by the content script and popup category detection.
Do not edit generated rules/config by hand unless you also update the generator or source catalog.
Run Tests
Regenerate rules:
npm run generate:rules
Run the local ruleset evidence test:
npm run test:evidence
Useful syntax checks:
node --check background.js
node --check content-script.js
node --check popup/popup.js
node --check scripts/generate-rules.mjs
node --check scripts/evaluate-test-set.mjs
Useful JSON checks:
node -e "for (const f of ['manifest.json','rules/rules.json','shared/tracker-catalog.json','shared/tracking-params.json','test/tracker-test-set.json','package.json']) JSON.parse(require('fs').readFileSync(f,'utf8')); console.log('JSON OK')"
Manual Browser Check
After loading the unpacked extension, start a simple local server from this folder:
python -m http.server 8080
Then open:
http://localhost:8080/test/manual-test.html?utm_source=demo&utm_medium=test&fbclid=manual
With GetBlocked! enabled, the tracking parameters should be removed from the page URL and the popup should show page-level tracker activity. For a before/after check, compare the browser Network panel with the extension disabled and then enabled.
Contributor Links
License
MIT License. See LICENSE.
这条对你有帮助吗?
