
uBlock Origin 源码仓库深度解析从安装矩阵、默认过滤清单到静态网络过滤引擎与构建体系【免费下载链接】uBlockuBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock本文以 uBlock OriginuBO仓库根目录的 README.md 为主体骨架完整梳理其项目定位、多浏览器安装矩阵、默认过滤清单构成与扩展过滤语法并结合仓库源码如 src/js/static-net-filtering.js、src/js/hntrie.js、Makefile与构建脚本深入讲解其“CPU 与内存高效”承诺背后的核心引擎实现以及 MV2/MV3、npm 核心包等多种产物的构建与发布流程读完后可对 uBO 的整体架构与二次开发方式形成完整认知。一、项目定位一个 CPU 与内存高效的宽谱内容拦截器README.md 对项目的核心定义是uBlock OriginuBO是一个面向 Chromium 与 Firefox 的 CPU 和内存高效的宽谱内容拦截器wide-spectrum content blocker默认拦截广告、追踪器、加密货币矿机、弹窗、反拦截干扰脚本、恶意网站等。它使用 EasyList 的过滤语法并在此基础上扩展该语法以支持自定义规则和过滤项。README 中同时明确了两点价值立场详见 MANIFESTO.md使用拦截器不是“窃取”内容uBO 的首要目标是帮助用户中和这些侵犯隐私的手段并且对不愿使用更技术性手段的用户保持友好。MANIFESTO.md 进一步将这一立场浓缩为一句话“用户自己决定浏览器中哪些网络内容是可接受的”并明确 uBO 项目不支持 Adblock Plus 的 “Acceptable Ads” 理念认为该营销方案背后是营利机构的商业计划。项目采用 GPLv3 许可证见 LICENSE.txt完全免费、开源、不寻求任何捐赠。二、安装渠道与平台兼容性矩阵README 首页的核心内容是一张浏览器安装矩阵。结合仓库中的platform/目录结构platform/chromium/、platform/firefox/、platform/thunderbird/、platform/opera/、platform/safari/、platform/mv3/可以把官方支持的各平台及其状态归纳如下浏览器官方渠道README 中的状态说明FirefoxFirefox Add-onsuBO 在 Firefox 上表现最佳同时提供桌面版与 Android 版Microsoft EdgeEdge Add-onsEdge 正从 MV2 向 MV3 迁移2026 年 8 月开始消费者端迁移目标 2026 年底完成企业端 2027 年初跟进OperaOpera Add-ons常规支持对应platform/opera/manifest.jsonChromiumChrome Web StoreMV2 扩展将在 2026-08-31 从 Chrome Web Store 移除见仓库中platform/mv3/的 MV3 替代方案ThunderbirdThunderbird Add-ons商店版本已停止更新停留在 1.49.2后续版本需从 GitHub Releases 手动安装全部GitHub ReleasesFirefox、Chromium MV2 与 Thunderbird 的稳定版和开发版需手动安装Chromium 与 Thunderbird 版本通常不会自动更新矩阵之外还有一行“Related”基于 MV3 构建的简化版本uBlock Origin LiteuBOL其源码就位于本仓库的 platform/mv3/ 目录见下文构建章节。2.1 各平台的安装要点FirefoxREADME 指出 uBO “works best” 于 Firefox提供桌面版和 Android 版另有开发版构建可用。ChromiumChrome Web Store 版本MV2标注了 2026-08-31 的移除时间点Edge 商店版本在 1.62 版本前由第三方代理发布1.64 版本起完成所有权转移Opera 走 Opera Add-ons。uBO 应当兼容任意 Chromium 内核浏览器。ThunderbirdREADME 特别强调在 Thunderbird 中 uBO 不影响邮件内容只作用于信息源feeds——这是一个容易误解的重要边界。通用约束README 明确要求不要将 uBO 与其他内容拦截器同时使用。uBO 的性能已达到或优于大多数主流拦截器而其他拦截器可能妨碍 uBO 的隐私保护和反拦截器anti-blocker防御特性正常工作。企业部署README 单列了 “Enterprise Deployment” 小节指向部署文档README 中以 wiki 外链形式给出本仓库内对应的是src/_locales/下的多语言资源与各平台 manifest。2.2 文档模式Basic Mode 与 Advanced ModeREADME 的 Documentation 小节将用户界面划分为两种模式Basic Mode基础模式简洁的弹窗用户界面属于“装完即忘”install-it-and-forget-it型安装默认配置即为最优Advanced Mode高级模式高级弹窗用户界面包含一个可按站点配置的点选式防火墙point-and-click firewall可对每个站点逐类开关请求类别。这个“按站点防火墙”在源码中有直接对应src/js/ublock.js 实现了基于会话/持久化两级存储的防火墙开关sessionSwitches/permanentSwitches、sessionFirewall/permanentFirewall来自 src/js/filtering-engines.js并通过matchDirective()将白名单指令纯主机名、通配符、正则逐级匹配到父级域名——例如www.example.org会依次尝试example.org等父域这正是高级模式“per-site 配置”的底层机制。三、默认过滤清单与过滤数据体系README 说明 uBO 默认使用以下过滤清单EasyList、EasyPrivacy、Peter Lowes Blocklist、Online Malicious URL Blocklist以及 uBO 自有的 uBO filters此外还支持其他清单与 Hosts 文件并且用户可以随时取消勾选任何预选项README 还对比了 Adblock Plus 默认只启用 EasyList ABP filters Acceptable Ads。仓库内 assets/assets.json共 970 行就是这套过滤清单的声明式配置源它精确回答了“uBO 到底从哪些源、以何种策略拉取过滤数据”。从中可以确认清单条目结构每个清单条目包含content内容类型如filters/internal、group/parent/title/tags用于界面分组展示、contentURL按优先级排列的原始拉取地址列表、cdnURLs多个 CDN 镜像源含 GitHub Pages、Cloudflare Pages、jsDelivr 三个 CDN、patchURLs增量补丁目录支持差量更新等字段。uBO 自有清单分组ublock-filtersAdsgroup: default即默认勾选、ublock-badwareBadware risks标签malware security、ublock-privacyPrivacy等均挂在parent: uBlock filters之下——这与界面里“uBlock filters”这一父组展开出 Ads/Privacy/Badware 等子项的呈现方式一致。内置数据与更新周期assets.json自身updateAfter: 13天public_suffix_list.dat公共后缀列表用于正确解析域名层级updateAfter: 19ublock-badlistsupdateAfter: 29。contentURL数组的第二个元素是assets/ublock/*.txt形式的仓库本地兜底路径如assets/ublock/filters.min.txt意味着清单在远程不可达时仍有本地静态副本。构建期预拉取Makefile 中的dist/build/uAssets目标由 tools/pull-assets.sh 实现构建时预下载过滤清单开发态的 assets/assets.dev.json 则是开发环境的对应配置。3.1 扩展过滤语法在源码中的形态README 提到 uBO “使用 EasyList 过滤语法并扩展它”。扩展能力的实现集中在 src/js/static-filtering-parser.js从其中的类结构可以看到解析器的完整抽象preparser预处理展开##%前置条件如env_brave等环境 token、AstFilterParser过滤规则 AST 解析、ExtSelectorCompiler扩展 CSS 选择器编译、DomainListIterator域名列表迭代。而 src/js/static-net-filtering.js 中上百个Filter*类FilterHostnameDict、FilterBucket、FilterRegex、FilterOnHeaders、FilterMessage、FilterCompiler等正是各类过滤项编译后的运行时形态——静态网络过滤引擎会依据规则特征为每条过滤规则选择成本最低的匹配器类型纯主机名用字典/Trie、精确 URL 用哈希桶、正则用单独桶这是其“高效匹配”承诺的关键。仓库中还保留了针对静态过滤解析器的测试页面 docs/tests/static-filtering-parser-checklist.txt 与 docs/tests/hntrie-test.html、docs/tests/hnset-benchmark.html 等基准测试页面可用来验证解析器与主机名 Trie 的正确性和性能表现。四、核心过滤引擎的源码结构从src/js/目录的模块划分结合 src/js/ 顶层定义清单可以勾勒出 uBO 的引擎分层静态网络过滤SNFEsrc/js/static-net-filtering.js src/js/static-net-filtering-parser 对应逻辑负责解析并执行过滤清单src/js/static-filtering-io.js 中的CompiledListWriter/CompiledListReader实现编译后清单的序列化读写src/js/static-ext-filtering-db.js 中的StaticExtFilteringHostnameDB提供扩展存储中的主机名数据库。主机名 Triesrc/js/hntrie.jsHNTrieContainer与 src/js/hnswitches.jsDynamicSwitchRuleFiltering。这是 uBO 的标志性数据结构一种为纯主机名集合高度优化的压缩 Trie标签从右向左匹配www.example.org能命中example.org而anotherexample.org不会在 CPU 与内存效率上是核心关切也是 uBO 相比逐条正则扫描式方案的性能基础。动态网络过滤src/js/dynamic-net-filtering.jsDynamicHostRuleFiltering、DynamicURLRuleFiltering实现高级模式下的点选防火墙与“拒绝/放行某类请求”的动态规则。外观过滤Cosmetic filteringsrc/js/cosmetic-filtering.js 与 src/js/contentscript-extra.js 中大量的PSelector*Task类支撑 uBO 自有的过程式选择器procedural selector语法如xpath、text、upward等操作符对应测试页面 docs/tests/procedural-cosmetic-filters.html 与 docs/tests/css-selector-based-cosmetic-filters.html。脚本注入Scriptletssrc/js/scriptlet-filtering-core.js 与 src/js/scriptlets/ 目录17 个脚本let实现如prevent-xhr、json-edit、cookie、set-constant等配合重定向引擎 src/js/redirect-engine.js 将匹配请求替换为 src/web_accessible_resources/ 中的 noop/shim 资源noop.js、googletagmanager_gtm.js等——这是 README 中“defusing anti-blockers”反拦截器拆解特性的直接实现。防火墙开关与白名单如前所述位于 src/js/ublock.js703 行含matchDirective/matchBucket等核心函数与 src/js/whitelist.js。src/js/wasm/目录则包含部分热点路径的 WASM 实现如主机名匹配相关的.wasm/.wat文件src/lib/中内置了 lz4 压缩、punycode、csstree、公共后缀列表等第三方库保证扩展无运行时外部依赖。五、构建与发布体系Makefile 驱动的多平台产物仓库的 Makefile 是理解整个交付链路的钥匙。其主要目标与对应脚本如下Make 目标产物实现脚本chromiumdist/build/uBlock0.chromiumtools/make-chromium.shfirefoxdist/build/uBlock0.firefoxtools/make-firefox.shoperadist/build/uBlock0.operatools/make-opera.shnpmdist/build/uBlock0.npm即gorhill/ubo-core包tools/make-npm.shmv3-chromium/mv3-firefox/mv3-edge/mv3-safaridist/build/uBOLite.[platform]tools/make-mv3.shlintESLint 检查npm run linteslint.config.mjsclean/cleanassets清理构建产物 / 缓存的过滤清单—以 tools/make-chromium.sh 为例Chromium 包的标准构建流程为清空并创建dist/build/uBlock0.chromium执行 tools/copy-common-files.sh 复制公共文件src/下的 JS/CSS/HTML 与本地化资源复制platform/chromium/下的平台专属 JS/HTML/JSON如 platform/chromium/manifest.json、platform/chromium/webext.js将nb语言目录复制为noChrome 商店要求 Norwegian 代码为no运行 tools/make-chromium-meta.py 生成元数据版本、权限描述等按需打包为uBlock0.chromium.zip无参数或uBlock0_version.chromium.zip带版本号。5.1 MV3 版本uBlock Origin Lite的构建platform/mv3/README.md 给出了 MV3 版本的完整构建说明面向 Linux 环境git clone仓库后执行git submodule init与git submodule update运行make mv3-[platform]其中[platform]为chromium、edge、firefox或safari构建过程中会自动从远程服务器下载过滤清单产物位于dist/build/uBOLite.chromium、dist/build/uBOLite.edge、dist/build/uBOLite.firefox、dist/build/uBOLite.safaridist/build/mv3-data缓存远程数据以避免重复拉取可用make cleanassets清除缓存后以最新清单重新构建构建日志写入dist/build/uBOLite.[platform]/log.txt。值得注意的是tools/make-mv3.sh会调用一个 Node.js 脚本把过滤清单转换为 MV3 声明式规则集rulesets所有规则集最终打包进dist/build/uBOLite.[platform]/rulesets——这是 uBOL 与 uBO 在过滤机制上的根本差异MV3 的 declarativeNetRequest 无法在运行时解析完整过滤语法因此需要预编译。MV3 扩展的清单见 platform/mv3/chromium/manifest.json规则集定义在 platform/mv3/rulesets.json。5.2 发布流程Makefile 中还有完整的发布目标均要求传入version参数publish-chromium、publish-edge、publish-firefox、publish-dev-chromium、publish-dev-firefox、upload-firefox等分别调用 publish-extension/ 下的publish-chromium.js、publish-edge.js、publish-firefox.js、upload-firefox.js并携带商店 ID如 Chrome 商店 IDcjpalhdlnbpafiamejdnhcphjbkeiagm、Edge 商店 IDodfafepnkmbhccpbejgmiehpchacaeak、AMO 扩展 IDuBlock0raymondhill.net。Chromium 正式发布还涉及 CRX 更新源crxupdatepathdist/chromium/update.xml对应 README 中“GitHub Releases 版本通常不会自动更新”的说明。六、npm 核心包gorhill/ubo-coreREADME 徽章与 platform/npm/ 目录共同指向一个事实uBO 的核心过滤引擎已抽取为独立 npm 包gorhill/ubo-core当前版本 0.1.30要求 Node 18描述为“用于创建 uBlock Origin 静态网络过滤引擎SNFE工作实例”且无外部依赖。platform/npm/README.md 给出了完整的 API 用法这里完整保留其关键代码示例创建引擎实例并注入过滤清单useLists()接受{ name, raw }对象数组import { StaticNetFilteringEngine } from gorhill/ubo-core; const snfe await StaticNetFilteringEngine.create(); await snfe.useLists([ fetch(easylist).then(r r.text()).then(raw ({ name: easylist, raw })), fetch(easyprivacy).then(r r.text()).then(raw ({ name: easyprivacy, raw })), ]);匹配网络请求返回非 0 即被拦截// Blocked if ( snfe.matchRequest({ originURL: https://www.bloomberg.com/, url: https://securepubads.g.doubleclick.net/tag/js/gpt.js, type: script }) ! 0 ) { console.log(snfe.toLogData()); }序列化与快速反序列化跳过解析与编译阶段const serializedData await snfe.serialize(); // ... const snfe await StaticNetFilteringEngine.create(); await snfe.deserialize(serializedData);该包还支持直接馈送纯域名列表或 hosts 文件格式的清单Block List Project、Steven Blacks HOSTS 等。此外 platform/npm/README.md 单独介绍了底层组件HNTrieContainer对应 src/js/hntrie.jsimport HNTrieContainer from gorhill/ubo-core/js/hntrie.js; const trieContainer new HNTrieContainer(); const aTrie trieContainer.createOne(); trieContainer.add(aTrie, example.org); trieContainer.add(aTrie, example.com); // 从右向左按标签匹配 // www.example.org - 返回 4命中 // www.foo.invalid - 返回 -1未命中 console.log(trieContainer.matches(aTrie, www.example.org));注意事项matches()返回匹配起始位置或 -1reset()会移除容器中所有 trie之后旧的 trie 引用不再有效。仓库内 platform/npm/demo.js 与 platform/npm/tests/含wasm.js、leaks.js、snfe.js等测试可用于验证上述 API 行为。七、开发环境、代码质量与本地化开发依赖根 package.jsonname: uBlocktype: module要求Node 22、npm 11唯一的开发依赖是 ESLint 9含eslint/json用于校验 JSON 文件。npm run lint会检查./src/js/、./**/*.json与./platform/**/*.js并忽略lib/与npm/子目录规则见 eslint.config.mjs。仓库未配置独立单测目标test脚本仅为占位质量保障主要依赖 lint 与 docs/tests/ 下的浏览器端测试页面。多语言src/_locales/下包含 71 种语言的messages.jsonen、zh_CN、zh_TW、ja、ru、fr 等README 的 “Translations” 小节引导通过 Crowdin 参与翻译tools/import-crowdin.sh 负责将翻译导入仓库。版本记录发布历史在 CHANGELOG.md当前仓库记录覆盖 1.71.0–1.73.x 等近期版本例如 1.73.0 改进了proxy-apply、abort-current-script等 scriptlet 并新增piano-analytics.jsshim与 README “Release History” 小节呼应。八、关键仓库路径速查内容路径项目说明本文主体文档README.md项目宣言用户主权与隐私立场MANIFESTO.mdGPLv3 许可证LICENSE.txt过滤清单声明式配置assets/assets.json静态网络过滤引擎src/js/static-net-filtering.js过滤语法解析器src/js/static-filtering-parser.js主机名压缩 Triesrc/js/hntrie.js防火墙开关/白名单匹配src/js/ublock.js过程式外观过滤选择器src/js/contentscript-extra.jsScriptlet 集合src/js/scriptlets/构建入口Makefile、tools/MV3uBOL构建说明platform/mv3/README.mdnpm 核心包platform/npm/README.md、platform/npm/package.json版本记录CHANGELOG.md解析器/Trie 测试页面docs/tests/小结README 所描述的“高效宽谱拦截器”在仓库中逐层落地——assets.json声明式管理过滤数据源与 CDN 冗余hntriestatic-net-filtering提供面向主机名大集合的最低成本匹配动态防火墙与 scriptlet/shim 体系覆盖运行时干预而 Makefile 则以单一代码树产出 Firefox/Chromium/Opera MV2 扩展、四个平台的 uBOL MV3 扩展以及gorhill/ubo-corenpm 包五类产物。【免费下载链接】uBlockuBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考