网页上让人难受的地方太多了:文章页侧边栏跟着滚、视频站没下载按钮、搜索结果里塞满推广、评论区默认只显示前三条。每遇到一个,就得去装一个扩展,装到最后工具栏一排图标,浏览器启动慢一截。
用户脚本走的是另一条路:只装一个管理器,再用几十行 JS 解决具体问题。暴力猴(Violentmonkey)就是这类管理器里的一个,v2.50.0,MIT,成品包 2.94MB。它把「脚本从哪来、什么时候跑、跑在哪几个域名」这三件事管起来,脚本本身随用随写随删。
Windows 和 Linux 两侧我都跑了一遍:用源码重构建出 63 个文件(MV2)和 66 个文件(MV3),与官方发行包文件数完全一致;解压包加载 1.37 秒,示例脚本注入后首页与详情页都是 200,控制台 0 报错。先说清楚:这台机器只验证了 Chromium,Firefox 那份包没真机跑过,原因写在坑里。也不适合三类人,后面单独说。
它是什么,和别的脚本管理器差在哪
用户脚本管理器不执行任何业务逻辑,它只做四件事:存脚本、按 @match 判断当前网址该不该跑、把脚本注入页面、给你一个界面改脚本。
暴力猴的界面是中文的,扩展详情里写着一句「一个开源的用户脚本管理器,支持很多浏览器」。它的权限只有三条:读取浏览记录、显示通知、修改你复制和粘贴的数据。「允许访问的网站」默认是「在所有网站上」,这是脚本能匹配任意域名的前提。
和同类比,几个能实测到的差异点:
- 内置一份 CodeMirror 编辑器,脚本可以在扩展里直接改,改完刷新页面就生效,不用外部工具
- 弹出面板固定 320 像素宽,面板里能单独关掉「当前站点」的脚本执行,不用去设置页
- 支持从
file://导入导出 zip,备份的是一整个库,不是一条条脚本 - 设置里有「注入模式」三档:
auto、sync page、备用page。脚本抢在页面脚本前面执行,还是老实等页面加载完,就靠这个 - 新版本带了 MCP 入口(设置里叫「AI agent access」),默认没有待处理请求
我的测试环境
- Windows:Windows 11,Playwright 自带 Chromium 1248,persistent context 加载未打包扩展
- 工具链:node v24.21.0、pnpm 12.13.0(两侧同版本)
- Linux:CentOS Stream 9,2 核、内存 1610MB + swap 10239MB,宝塔面板 Web 终端,机器上没有图形界面
- 成品包:2.94MB / 3,077,771 字节 / 135 个条目,里面是
chrome-mv3与firefox-mv2两套目录 - 截图:桌面 1400 宽 deviceScaleFactor 1,手机 390 宽 deviceScaleFactor 2,共 12 张
- 路径:加载扩展 → 读 manifest → 打开选项页与弹出面板 → 装一个示例脚本 → 打开本地静态站看注入结果
安装:Chrome 和 Edge
- 解压包,Chrome 和 Edge 都用
chrome-mv3这个目录 - 地址栏输入
chrome://extensions/,Edge 是edge://extensions/ - 打开右上角的「开发者模式」
- 点「加载已解压的扩展程序」,选
chrome-mv3目录本身

加载完能看到版本号 2.50.0、大小 2.0MB、ID,检查视图显示一个 Service Worker 在跑。实测从点「加载」到扩展可用是 1.37 秒,第二轮 1.52 秒。
同一页往下拉,有一项 「允许运行用户脚本」,默认是关的。这一项不开,脚本列表照样能显示,页面上一条脚本都不会执行。打开时会弹一句提示:「此扩展程序将能够运行未经 Chrome 应用商店审核的代码」,确认即可。实测这一步打开之后,示例脚本才在页面上跑出横幅。
别指望命令行一键加载。 Chrome 137 之后移除了 --load-extension 启动参数,我写别的扩展教程时踩过,怎么调都不生效。手动走上面四步。
安装:Firefox
Firefox 用包里另一个目录 firefox-mv2,走临时加载:
- 地址栏输入
about:debugging#/runtime/this-firefox - 点「临时载入附加组件」
- 选
firefox-mv2目录里的manifest.json
这样装的扩展在浏览器重启后消失,下次要重来一遍。想要长期用,就得走签名安装包那条路。
这一份我这轮没跑成:Chromium 156 已经不认 MV2,把它当 Chromium 扩展加载会报 EXT_NOT_LOADED(等了 18.8 秒后超时失败);而机器上没有可自动化的 Firefox,所以 Firefox 侧只有产物一致性验证,没有真机注入截图。要装 Firefox 版,按上面三步手动来。
安装:Linux 侧与构建验证
Linux 桌面上的 Chromium 装法和 Windows 一样,把 chrome-mv3 拷过去,chrome://extensions 里加载即可。纯服务器没有图形界面,装不进去,所以这一侧做的是构建一致性验证,对下载者来说这项更重要——你拿到包里的目录,应该就是源码能构建出来的东西。
服务器侧实测:源码 tar.gz 917,129 字节,加速节点 6 秒拉下来,sha256 与本机收集包一致;解压 287 个文件;pnpm install --frozen-lockfile 22 秒;MV2 构建 49 秒、MV3 构建 50 秒;整段从开始到结束 2 分 27 秒。
两平台对比结果:
- 文件数完全一致:MV2 63/63,MV3 66/66
- 总字节数:MV2 2,118,780(Win)/ 2,118,823(Linux),差 43 字节;MV3 2,110,839 / 2,110,880,差 41 字节
- 结论是文件清单一致、逐字节不完全一致,差在几十字节这个量级
判读要谨慎:文件数相等不等于产物相同,字节差几十说明构建里带了时间戳一类的不确定因素。我原本还想把两侧逐文件 SHA256 拉平对比,服务器面板在 12:47 之后 HTTP 无响应,重试三次(5s / 15s / 45s)都没恢复,逐文件哈希清单没取回——所以这一项只到「文件数 + 总字节数」的粒度,别当成逐字节一致。
第一次装脚本:从地址到横幅
装完先别急着找脚本,用一条自己写的确认链路通了,后面出问题才好定位。我用一条本地示例脚本验证:
- 打开一个
.user.js地址,页面会跳到安装确认页 - 确认页顶部是「安装脚本」,中间是脚本元信息,下面是源码全文
- 点「安装 (Ctrl+Enter)」

确认页上能读到两个关键头:@grant none 和一条 @match 规则。前者表示这条脚本不需要任何特权 API,后者决定它只在指定的那个域名下跑。装脚本时最该看一眼的就是 @match,忽略它等于把所有网站都交出去。
从打开地址到脚本出现在面板里,实测 14.7 秒(首轮 14.4 秒)。
再打开被 @match 命中的页面,脚本注入成功的话会有一条紫色横幅:

首页和详情页都返回 200,横幅都在,data-vm-test 属性为 ok。整个验证流程 31.5 秒跑完,期间 0 个失败请求、0 条控制台报错。
装完先做这三件事
第一,把「允许运行用户脚本」打开。 这一步漏了会以为是扩展坏了:面板里脚本明明在,页面就是没反应。
第二,装一条只有几十行的测试脚本,确认链路通。 脚本头写 @match 指向一个你能控制的页面,脚本体只做一件事——往页面上插一行字。看到那行字,说明「存储 → 匹配 → 注入」三段都通了。
第三,在设置页导出一次备份。 备份导出的是 zip,包含脚本数据和扩展设置,换机或重装直接导回去。脚本攒多了这个文件比什么都值钱。
实测数据
- 成品包:2.94MB / 3,077,771 字节 / 135 个条目
- 构建产物:MV2 63 个文件 2,118,780 字节;MV3 66 个文件 2,110,839 字节
- 构建耗时:
pnpm install16.5 秒,MV2 24.96 秒,MV3 23.46 秒(Windows) - 版本对照:自建 MV2 63 文件 vs 发行包 63 文件,57 个 SHA256 一致、6 个不同;MV3 66 vs 66,60 个一致、6 个不同
- 目录指纹:MV2
fa733cd8…,MV3888a2768…(逐文件 SHA256 排序后再哈希) - manifest:name 暴力猴、version 2.50.0、mv 3、minChrome 135.0
- 加载到可用:1.37 秒(复测 1.52 秒),识别扩展 58 毫秒
- 选项页:2.74 秒打开,标题「暴力猴」
- 装一条脚本:14.7 秒(复测 14.4 秒),装完面板显示 1 个脚本
- 注入结果:首页 200、详情页 200,横幅都在,
data-vm-test=ok - 异常计数:0 条控制台报错、0 个失败请求、0 个 4xx/5xx
- 截图:12 张,抓取过程 0 报错
- 弹窗尺寸:宽 320 像素,面板里能改
解压即用也验了一遍:解到一个全新目录,装载 chrome-mv3,扩展起来 1.37 秒,选项页 2.74 秒,装脚本 14.7 秒,注入成功,全流程 31.5 秒、0 报错。
界面长什么样
主界面是脚本面板,左边是「已安装的脚本 / 设置 / 备份 / 关于」,右边是脚本列表。顶部那行有当前匹配到的脚本数:

每条脚本一行,右边一排小图标依次是:编辑源码、启用禁用、刷新、信息、主页、丢进回收站。搜索框下面那个下拉是排序方式,默认「执行顺序」。
点编辑进编辑器,代码、设置、帮助三个标签,右边能勾「允许更新 / 允许编辑」:

设置页一共十组,最常改的是「弹出式菜单和图标」(宽度、排序、徽标)、「更新」(检查频率)、「备份和维护」、「高级」(注入模式、黑名单)、「自定义样式」:

弹出面板就这么大,320 像素宽,顶上一行是版本号加三个按钮,第二行「为此站点查找脚本」,下面列出命中的脚本:

390 宽度下的实测页,脚本注入的横幅照样顶在最上面:

手机浏览器基本装不了扩展,这张图是为了看注入结果在小屏上的排版,不是手机版扩展。
三个真实的坑
第一个,Chromium 156 加载不了包里的 firefox-mv2。
我拿它当普通未打包扩展加载,Chromium 等了 18.8 秒后报 EXT_NOT_LOADED,扩展管理器里根本没有它。原因是新版本 Chromium 已经移除 MV2 扩展支持,和包里文件坏没坏无关。Chrome、Edge 只认 chrome-mv3 目录,Firefox 那份在 Firefox 里用。
第二个,扩展 ID 是用解压路径算出来的,换目录等于换扩展。
同一个包,我一直用 dist-mv3-win 加载,ID 是 dgkiccdccdpfmbiekmccgdfhlpodlgino;换到成品包里解出来的 chrome-mv3 目录,ID 变成 pkaipjcihfchdijkkgckgkdfghokgakc。未打包扩展的 ID 由绝对路径推导,路径一变 ID 就变。带来的后果很实际:ID 变了就算另一个扩展,旧 ID 下装的脚本、设置、localStorage 全都读不到,界面上看起来就是「我的脚本全没了」。所以解压位置先定下来,别装完再改名、搬目录。
第三个,「允许运行用户脚本」是独立开关,默认关闭。
Chrome 135 之后的 MV3 扩展都带这一项,位置在扩展详情页最下面。它默认关,关着的时候脚本不会执行。这一项是 Chrome 的安全折中:MV3 的扩展要能跑任意代码,必须由用户显式点头。实测里我是手动打开的,打开后横幅才出现。
另外有两个小的:自建产物和官方发行包不是逐字节相同,6 个文件 SHA256 不一致(common-ui.js、confirm/index.js、options/index.js、popup/index.js、public/lib/codemirror.js,MV3 还多一个 sw.js),所以别拿自己构建的包去校官方校验和;弹出面板宽度写死在设置里,改成别的值要自己去「弹出式菜单和图标」那组改。
这几类人适合,这几类不适合
适合:
- 只想改几个网页细节,不想为每个需求装一个扩展的人
- 用公司电脑或公用机器,装不了应用商店扩展的人
- 要用
file://页面、内网系统、本地测试站做网页改造的开发者 - 已经有一堆
.user.js收藏,需要一个能分类、能搜索的容器
不适合:
- 期待装完就有效果的。管理器本身不提供任何功能,脚本得自己装
- 主要用 Firefox 又不想手动加载的。这轮没验到 Firefox 真机
- 不想看脚本源码的。别人写的用户脚本和扩展一样能读你的页面,
@match写宽了什么都拦不住 - 手机上用的。移动端浏览器装不了扩展
常见问题
{collapse-item label="扩展 ID 变了,之前的脚本还有救吗?"}A:脚本文件还在,但挂在旧 ID 的存储里,新 ID 读不到。切回原来的目录路径能恢复。所以要长期用,解压位置一开始就定死,别改名。{/collapse-item}
{collapse-item label="Chrome 每次启动都提示「请停用开发者模式扩展」怎么办?"}A:会一直提示,点「保持启用」即可。这是我的加载方式决定的——未打包扩展走的就是开发者模式那条路。受不了这个提示只能走应用商店。另外 Chrome 137 之后 --load-extension 启动参数被移除,命令行加载那条捷径已经没了。{/collapse-item}
{collapse-item label="脚本里的 GM_ 系列函数是什么?"}A:管理器注入的特权 API,GM_setValue 这类用来跨页面存数据、发请求。脚本头写 @grant none 表示不申请这些权限,写 @grant GM_setValue 之类才会给你。权限开得越少越安全。{/collapse-item}
{collapse-item label="可以用它批量管理已有的脚本吗?"}A:可以。设置页「备份和维护」支持从 zip 导入、导出整个库,也支持导出成 zip 后在另一台机器导回去。脚本多的时候这是唯一省事的路。{/collapse-item}
{collapse-item label="手机上能用吗?"}A:这是浏览器扩展,不是 App,移动端浏览器基本装不上。我截的「手机端」图是 390 宽度下的页面注入效果。{/collapse-item}
源码获取
建议先转存到自己网盘再下载。手机上打开链接点右下角「保存到网盘」,回头在夸克 App 的「我的网盘」里下载。