简体中文 · English
Downlink 是一个用于对接多线程下载器的浏览器扩展,在浏览器确认下载响应后接管任务,并发送到你选择的外部下载器。
它支持接入多种下载器,并可在设置中随时切换,无需安装多个扩展。一个插件即可完成下载接管、网页媒体捕获、任务状态查看、媒体预览和右键快捷发送,兼容 Chromium 内核浏览器(Chrome / Edge)、Firefox 与 Safari。
- 下载接管:在浏览器确认下载响应后接管任务,转交给当前配置的下载器;也支持通过弹窗或右键菜单手动发送
- 多下载器切换:内置 Aria2、Motrix、MotrixNext、Gopeed、AB DM、NeatDM 适配器,设置中一键切换
- 智能识别:按扩展名和响应类型识别常见文件下载;可配置低于大小阈值的小文件保留给浏览器下载,减少下载器任务噪音
- 媒体捕获:监听页面中的音频、视频请求,在媒体面板中展示、预览并发送到下载器
- 请求头透传:透传 Cookie、Referer、鉴权头等关键请求头,改善需要登录态或防盗链校验的下载场景
- 任务管理:弹窗中查看任务列表和待确认任务;Aria2 支持独立任务管理页,可查看进度、暂停/继续、限速
- 错误提醒与连接测试:发送失败时通过通知提醒,并提供基础连接检测
- 快捷键:默认
Ctrl+Shift+D(macOS 为MacCtrl+Shift+D)快速切换自动拦截
各商店已发布版本:
| 商店 | 版本 |
|---|---|
| Chrome Web Store | |
| Edge Add-ons | |
| Firefox Add-ons |
Chromium 内核浏览器(Chrome / Edge):
- 打开扩展管理页面(
chrome://extensions或edge://extensions) - 开启“开发者模式”
- 点击“加载已解压的扩展程序”,选择
dist/chromium目录(或项目根目录)
Firefox:
- 打开
about:debugging#/runtime/this-firefox - 点击“临时载入附加组件”
- 选择
dist/firefox/manifest.json
构建需要 Node.js 20+ 和 zip 命令行工具;项目没有第三方 npm 依赖,无需执行 npm install。
npm run package:chromium # 产物:dist/downlink-vX.Y.Z-chromium.zip
npm run package:firefox # 产物:dist/downlink-vX.Y.Z-firefox.zip
npm run package:all # 同时构建 Chromium 与 Firefox开发模式使用 watch 构建,改动后自动重新生成,不产出 zip:
npm run dev # 同时监听 Chromium 与 Firefox
npm run dev:chromium # 仅 Chromium,输出到 dist/chromium
npm run dev:firefox # 仅 Firefox,输出到 dist/firefoxFirefox 打包默认使用自托管 ID downlink@winapps.cc。如需打包 AMO 商店版,指定另一个 ID 以避免冲突:
FIREFOX_ADDON_ID="downlink-amo@winapps.cc" npm run package:firefoxFirefox 构建版会自动添加 webRequestBlocking 权限,并将主机权限收窄到 http/https 与本地回环地址(详见“权限说明”)。
本地构建 Safari Web Extension 宿主 App:
npm run safari:build该命令会先执行 safari:check 校验共享资源与版本一致性,再使用 Xcode 构建 Release 版本。需要可用的 Apple 签名配置;如只需验证工程能否编译,可禁用代码签名:
CODE_SIGNING_ALLOWED=NO npm run safari:buildSafari 工程位于 safari/Downlink/Downlink.xcodeproj,构建产物目录为 dist/safari/DerivedData。
| 命令 | 说明 |
|---|---|
npm test |
运行测试(node --test) |
npm run dev |
同时监听构建 Chromium 与 Firefox(不生成 zip) |
npm run dev:chromium |
仅监听构建 Chromium,输出 dist/chromium |
npm run dev:firefox |
仅监听构建 Firefox,输出 dist/firefox |
npm run package:release / package:all |
同时打包 Chromium 与 Firefox 的 zip |
npm run package:chromium |
打包 Chromium zip |
npm run package:firefox |
打包 Firefox zip |
npm run safari:sync |
将共享扩展资源同步到 Safari 工程,并同步各端版本号 |
npm run safari:check |
只读预检:检查 Safari 资源与版本是否漂移 |
npm run safari:build |
预检通过后执行 Xcode Release 构建 |
npm run safari:sync:把根目录的共享资源(脚本、页面、图标、语言包等)复制到safari/Downlink/Downlink Extension/Resources,同步manifest.json、package.json、Safari manifest 与 Xcode 工程中的版本号,并确保 Safari 的 JavaScript 文件带 UTF-8 BOM。Safari 专属文件不会被覆盖。npm run safari:check:只读检查以上内容是否一致,供 CI 或发布前使用;有漂移时提示运行npm run safari:sync修复。node scripts/sync-versions.mjs --check:单独检查各端版本号是否与根manifest.json一致。node scripts/generate-firefox-update-manifest.mjs <xpi路径> <输出路径>:为 Firefox 自托管生成updates.json更新清单(含 SHA-256 哈希),由 GitHub Release 工作流调用。
仓库拆分为 4 个独立工作流:
| 工作流 | 触发方式 | 说明 |
|---|---|---|
| GitHub Release | 推送 v* tag |
运行测试并打包上传 Chromium 包到 Release,随后签名 Firefox 自托管 XPI 并一并上传 |
| Publish to Chrome Web Store | 手动触发(输入 tag 或 commit) | 按指定 ref 打包并提交 Chrome Web Store |
| Publish to Edge Add-ons | 手动触发(输入 tag) | 按指定 tag 打包并提交 Edge Add-ons |
| Publish to Firefox Add-ons | 手动触发(输入 tag 或 commit,可附审核备注) | 按指定 ref 打包并以 AMO 公开上架(listed)渠道提交 |
GitHub Release 除 Chromium 包外,还会上传 Firefox 自托管更新文件:
downlink-vX.Y.Z-firefox.xpidownlink-firefox-updates.json
发布前需要在 GitHub Secrets 中配置:
CHROME_PUBLISHER_IDCHROME_EXTENSION_IDCHROME_SERVICE_ACCOUNT_JSONEDGE_PRODUCT_IDEDGE_CLIENT_IDEDGE_API_KEYAMO_JWT_ISSUERAMO_JWT_SECRET
可通过 GitHub Variables 配置 FIREFOX_LISTED_ADDON_ID 覆盖 Firefox 商店版的附加组件 ID,默认值为 downlink-amo@winapps.cc。
tag 版本必须与 manifest.json 中的 version 一致,例如 tag v1.3.10 对应 manifest.json 中的 1.3.10。
- 点击扩展图标打开 Downlink
- 在“设置”中选择目标下载器
- 根据所选下载器填写连接信息
- 打开“自动拦截下载”后,浏览器确认的下载响应会按规则自动转交
- 如需手动发送,可通过弹窗中的任务区、媒体区或右键菜单操作
需要填写:
- RPC 地址
- RPC 密钥,可留空
适合本地或远程运行 aria2c 或 Motrix,并开启 RPC 的场景。
如果你同时安装了 MotrixNext,可勾选“使用 MotrixNext 管理”,在任务面板中快速打开查看。
需要填写:
- 端口号
- 密钥,可留空。留空表示 MotrixNext 的
extensionApiSecret未配置,此时 HTTP API 不启用鉴权,连接检测仍会成功。
Downlink 会直接向本机 MotrixNext HTTP 接收服务发送 POST /add,请求体格式为 { "url": "...", "filename": "...", "referer": "...", "cookie": "..." }。filename 会在浏览器捕获或媒体面板识别到文件名时附带,referer 和 cookie 会在浏览器捕获到相关请求头时附带。MotrixNext 模式不使用扩展侧的二次确认、暂停/继续或进度控制。
需要填写:
- API 地址,默认
http://127.0.0.1:9999 - Token,可留空
Downlink 会通过 Gopeed HTTP API 发送 POST /api/v1/tasks。浏览器拦截到的普通下载默认会先进入确认面板;如需自动开始下载,可在设置中开启“普通任务静默下载”。只有在确认面板勾选“单线程不分片下载”时才会传递 opts.extra.connections = 1,否则不传递连接数参数。扩展不会向 Gopeed 指定保存路径,由 Gopeed 端控制下载位置。
媒体面板中的 HLS 清单可交给 Gopeed 原生流媒体下载器处理,并且清单 URL 的路径需要以 .m3u8 结尾。Downlink 不根据 Gopeed 报告的版本号预先限制 HLS,而是直接发送任务并由 Gopeed 判断当前构建是否支持。HLS 请求仅透传播放所需的安全请求头,并由 Gopeed 决定合并后的文件名和扩展名。Gopeed 当前原生实现只处理点播 HLS;DASH、直播 HLS 或无 .m3u8 后缀入口仍受 Gopeed 能力限制,其中能在发送前判定的输入会明确报错,不会退化成只下载清单文件。
需要填写:
- 服务地址
- 端口号
一般情况下,需要核实软件本体和该扩展中的端口号是否一致。
普通任务默认通过 /add 添加;如需普通任务静默开始下载,可在设置中开启对应选项。媒体资源会固定使用 /start-headless-download,以保证视频文件名正确。浏览器拦截和右键菜单都会直接发送到 AB DM,不经过扩展的确认面板。
媒体面板中的点播 HLS 会以 AB DM 原生 type: "hls" 下载源发送、立即开始下载,并自动把输出扩展名调整为 .ts。该功能需要 AB DM 1.7.0 或更高版本,仅支持非加密、TS 分片的 HLS 媒体清单;直播 HLS、主清单、fMP4 HLS 和 DASH 当前不受支持。HLS 发送失败时不会降级成普通文件任务,因此不会误下载 .m3u8 清单。
当前通过默认 WebSocket 地址连接:
ws://127.0.0.1:10007/download
适合本地已运行 NeatDM 接收服务的场景。Neat Download Manager 不开放端口配置。 浏览器拦截和右键菜单都会直接发送到 NeatDM,不经过扩展的确认面板。
Downlink 会监听页面中的音频和视频请求,并在媒体面板中展示可发送资源。对于部分依赖请求头、Cookie 或防盗链校验的资源,扩展会尽量补齐请求头以提升可下载性和可预览性。
Chromium 构建(Chrome / Edge)当前使用的权限来自根目录 manifest.json:
downloads:接管浏览器确认的下载任务,处理文件名与下载事件storage:保存扩展设置(同步/本地存储)notifications:下载或连接失败时弹出提醒tabs:获取来源标签页、打开下载器管理页面、跟踪任务状态webRequest:识别下载响应、捕获 Cookie / Referer / 鉴权头等关键请求头contextMenus:右键菜单“用当前下载器下载”declarativeNetRequest:为媒体预览与元数据探测请求临时补头(会话级规则,不持久化)- 主机权限
<all_urls>:匹配任意站点的请求,用于下载识别与媒体捕获
Firefox 构建版由打包脚本自动调整:
- 额外添加
webRequestBlocking,用于在 Firefox 中拦截和取消请求 - 主机权限收窄为
http://*/*、https://*/*、*://127.0.0.1/*、*://localhost/*及对应的ws://地址
Safari 工程使用独立的清单 safari/Downlink/Downlink Extension/Resources/manifest.json,权限集合与 Chromium 版略有差异(包含 nativeMessaging、scripting、cookies、webNavigation 等 Safari 所需权限),以该文件为准。
manifest.json:扩展清单(Chromium / Firefox 共用,打包时按目标调整)background.js:后台逻辑、下载转发、请求捕获content-script.js:页面注入脚本popup.html/popup.js/popup-app.js:扩展弹窗 UIpreview.html/preview.js:媒体预览页面aria2-tasks.html/aria2-tasks.js:Aria2 任务管理页lib/:配置默认值、下载器适配、媒体捕获、i18n 等共享模块scripts/:打包、同步、版本校验与发布脚本safari/:Safari Web Extension 宿主工程icons/:扩展图标




