油猴脚本的世界:Tampermonkey 是什么、脚本市场怎么逛
「油猴」是 Tampermonkey 在中文圈的昵称,这个名字来自它更老的前辈 Greasemonkey( greasy monkey,油滑的猴子)。它本质上是一个浏览器扩展,但它的职业是「脚本管理器」:替你安装、启用、禁用、更新成千上万个来自社区的小脚本。想理解扩展生态,先逛明白油猴的世界是最快的热身。
Tampermonkey 的角色
用户脚本本身只是一段文本,谁来实现「把这段文本安装进浏览器、在匹配的页面自动执行」?答案就是管理器。Tampermonkey 支持 Chrome、Edge、Firefox、Safari 等主流浏览器,是事实上的行业标准。它提供了:
- 脚本的安装、开关、分组、自动更新;
- 一套 GM_* 特权 API(跨域请求、存储、样式注入等);
- 内置编辑器,写完保存即生效;
- 兼容 Greasemonkey 时代的元数据协议。
从一个事实就能看出它的地位:Chrome 官方扩展商店里 Tampermonkey 长期位居用户量最大的扩展之列。对开发者而言,它还有一层意义——GM_* API 与扩展的 chrome API 概念相通,先写脚本再迁移到扩展是最平滑的成长路径。
脚本从哪来:三大渠道
用户脚本没有官方商店,社区主要靠这几个渠道流通:
| 渠道 | 特点 | 适合场景 |
|---|---|---|
| Greasy Fork | 最大的脚本站,有审核与反馈机制 | 日常找脚本 |
| OpenUserJS | 老牌开源脚本库 | 查源码、找冷门脚本 |
| GitHub Gist / 仓库 | 作者直发,无中间商 | 关注特定作者的更新 |
逛脚本站的基本动作是搜站点域名而不是功能名。比如想让某视频网站支持倍速,直接搜该网站域名,命中率高得多。每个脚本页都会展示安装量、版本、适用站点和历史更新日志,安装量高且更新频繁的脚本通常更可靠。
装之前必做的三件事
用户脚本没有任何官方审核,安装等于把你的一段代码放进了浏览器,它能访问你打开的每个匹配页面。所以装之前养成三个习惯:
- 读元数据头。看
@match覆盖了哪些网站,范围远超它的功能所需就要警惕——一个去广告脚本不该要求所有网站的权限。 - 扫一遍代码。重点搜
GM_xmlhttpRequest、eval、document.cookie这几个点,看它们把数据发到哪里。大部分恶意脚本会在跨域请求里现出原形。 - 看更新时间。网站改版会让老脚本失效甚至误伤,超过一年没更新的脚本要谨慎。
学会了辨别,你就掌握了「用」的层面。下一步自然是「写」——这也是本教程的重心。第二章会从安装面板讲起,把元数据头、GM API 和三个完整案例过一遍。
为什么先学脚本再学扩展
有三个很实际的理由。第一,反馈快:脚本保存即生效,不用打包、不用重新加载扩展。第二,概念同源:脚本元数据里的 @match 对应扩展 manifest 里的 match patterns,GM_addStyle 对应注入 CSS,GM_setValue 对应 chrome.storage,学一遍两边通用。第三,试错便宜:想法不成熟时先写脚本验证,验证通过再升级成正式扩展上架,沉没成本最低。
写脚本时正则是高频工具——URL 匹配、文本替换、选择器过滤都离不开它。正则匹配写法可参考本站《正则表达式从入门到精通》:正则实战。
工具链方面,油猴自带编辑器够用,但复杂脚本建议在外部编辑器里写好再粘贴进去。如果你平时用 HBuilderX 做前端开发,它的代码补全和本地工程管理能让脚本开发舒服很多,技巧见 HBuilderX 效率技巧。
本章小结
Tampermonkey 是用户脚本的运行底座,Greasy Fork 等社区站是脚本的主要流通渠道;安装前读元数据、扫代码、看更新时间是基本安全素养。脚本与扩展能力相通、概念同源,是进入扩展开发最好的练手场。
官方文档不覆盖用户脚本领域,本章内容依据社区通用实践整理;涉及扩展 API 的部分,仍以 https://developer.chrome.com/docs/extensions 为准。
管理器的日常操作速查
装好之后,这几个操作会高频用到,先建立操作地图:
| 操作 | 位置 | 说明 |
|---|---|---|
| 临时停用某脚本 | 图标面板列表 | 点脚本旁的开关,刷新页面生效 |
| 编辑脚本 | 面板菜单 → 管理面板 | 内置编辑器支持语法高亮与保存提示 |
| 查看脚本更新 | 管理面板 | 显示上次检查更新的时间与版本 |
| 导出备份 | 实用工具 | 导出 zip,换机或重装时导入 |
| 调试脚本 | 编辑器或目标页 Console | console.log 输出在目标页的 DevTools 里 |
两个容易困惑的点提前说清。其一,脚本的 console 输出出现在目标网页的控制台,不是油猴面板——找日志要去页面 F12 里看。其二,同一个脚本不同浏览器里行为可能不同,因为 GM API 的实现由各家管理器决定,Tampermonkey 的实现最完整,跨浏览器分发脚本时要在多个管理器里实测。
逛脚本站的具体打法
搜索之外,Greasy Fork 还有几类值得定期翻的入口。每日/每周热门榜能看出社区的注意力在哪:某网站突然改版引发适配潮、某个新玩法爆发,榜单都是最先反映的地方。分类浏览适合顺藤摸瓜:找到一个好脚本后,看同作者的其他作品,作者风格与质量通常稳定。脚本的「反馈」区是隐藏金矿——评论区里的 bug 报告、适配请求、改进建议,比脚本本身更能教你「这类需求大家实际怎么用」。
关注更新日志的习惯也值得养成。老练的脚本作者会在版本说明里写清「适配了某站的改版」,读几个月你就对「网站改版会让哪些功能失效」有了手感,写自己的脚本时防御性会强很多。
脚本管理的工程习惯
脚本装多了(超过二三十个)就会出现管理问题,几个社区验证过的习惯:
- 命名带前缀:自己的脚本统一加前缀(如
my-),与安装的社区脚本区分开,导出备份时一眼能认出哪些是自己写的; - 写 @description:三个月后回看,靠脚本名根本想不起它是干嘛的,描述里写清楚触发站点和功能;
- 版本号递增:改一版加一版号,出问题能回退到确定的可用版本;
- 定期导出:油猴的脚本存在浏览器 Profile 里,重装浏览器就没了,实用工具里的导出功能就是你的备份。
这些习惯成本低,但都是从「玩玩」走向「认真写」的分界线。管理器还会自动检查 @version 变化来拉取脚本更新,所以给社区脚本投稿时,版本号纪律直接影响别人能不能收到你的修复。
安全事件怎么看
用户脚本历史上有过投毒事件:热门脚本被接手后加入数据窃取代码,或脚本站出现仿冒的假脚本。防住的要点还是第一章说的那三条:读元数据看匹配范围、扫代码看跨域请求、看更新时间与作者信誉。多加一条:同名脚本比对作者主页,确认来源是原作者而不是仿冒者。脚本生态没有商店级审核,你的判断力就是审核。
本章小结
Tampermonkey 是用户脚本的运行底座,Greasy Fork 等社区站是脚本的主要流通渠道;安装前读元数据、扫代码、看更新时间是基本安全素养。脚本与扩展能力相通、概念同源,是进入扩展开发最好的练手场。
官方文档不覆盖用户脚本领域,本章内容依据社区通用实践整理;涉及扩展 API 的部分,仍以 https://developer.chrome.com/docs/extensions 为准。
脚本与扩展的「第一个对照实验」
趁热做个对照:把同一个功能(改页面背景)分别用脚本和扩展实现,感受两者的差异点在哪。脚本版只需 GM_addStyle 加一行;扩展版要 manifest 声明 content_scripts、写 CSS 文件、重载扩展。功能等价,但两版的行为细节不同:扩展的 CSS 在 DOM 构建前注入,无闪烁;脚本要配 @run-at document-start 才能达到同样效果。这个对照实验五分钟做完,却把「能力相通、机制不同」这句话变成了具体的手感——它也是你判断「这个需求该用哪条路」的直觉来源。
脚本生态与扩展生态的另一个差异是「口碑机制」:脚本站的评分与安装量公开透明,作者直接面对用户反馈;扩展商店多了审核这道闸,反馈链路更长。做开源产品的人两种链路都体验一遍,对「如何让用户信任你的代码」会有更立体的理解。
把这两个差异记在心里,后面读扩展章节时会不断与脚本时代的经验对表——每一次「原来扩展是这样处理的」都是理解加深的机会。
最后用两个代码片段收束本篇。第一段是脚本的最小骨架,可以直接当新脚本的起点:
// ==UserScript==
// @name 骨架模板
// @match https://example.com/*
// @grant none
// ==/UserScript==
(function () {
"use strict";
console.log("script ready:", location.href);
})();
第二段演示 GM 存储的最小读写,验证管理器的特权能力是否可用:
// ==UserScript==
// @match https://example.com/*
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
GM_setValue("ping", Date.now());
console.log("storage ok:", GM_getValue("ping"));
两段都能跑通,说明你的环境完全就绪,第二章的正式内容可以放心开始。
本章由 WorkBuddy 原创整理,API 行为依据 Chrome 扩展官方文档(Manifest V3)。
