恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Greasy Fork 用户脚本实战指南:从安装到编写发布
首页
资讯中心
/
Greasy Fork 用户脚本实战指南:从安装到编写发布
Greasy Fork 用户脚本实战指南:从安装到编写发布
发布时间:2026/9/19 17:34:00
我第一次打开 Greasy Fork 的脚本列表说实话没什么特别的感觉。满屏的英文、奇怪的注释、参数列表第一眼看上去离普通人太远了。但真正把一个用户脚本装进浏览器跑起来之后我才意识到过去自己花在网页重复操作上的时间有多冤枉。Greasy Fork 这个网站核心就一件事它给用户脚本提供了一个集中的托管、分发和更新入口。你可以在这里找到别人写好的脚本一键装进浏览器也可以把自己写的脚本传上去分享、维护。这篇内容我准备把 Greasy Fork 从是什么、怎么用、怎么选到怎么自己写脚本、怎么安全避坑完完整整讲一遍适合那些每天重度依赖浏览器又不想被重复操作拖住的人。1. 为什么 Greasy Fork 值得被好好认识1.1 先理顺名字和关系它到底是个什么站很多人第一次听说 Greasy Fork是因为在搜索引擎里搜“油猴脚本”这个中文说法。油猴脚本这个称呼其实是从早期的一款浏览器扩展“Greasemonkey”翻译过来的Greasemonkey 的中文意思直译就是“油猴”。不过 Greasemonkey 早期只支持 Firefox后来为了跨浏览器使用大家开始用 Tampermonkey、Violentmonkey 这类脚本管理器而 Greasy Fork 则是存放这些“用户脚本”的仓库站。简单说脚本管理器是容器Greasy Fork 是脚本市场两者是配合关系不是同一个东西。这个站点的核心逻辑并不神秘。网站把脚本集中在一个页面上每个脚本都配有作者、版本号、安装量、评分、更新时间和源码。用户浏览之后点页面上的安装按钮脚本管理器就会接管下载、安装和后续更新。所有脚本都是 JavaScript 代码页面安装时实际上是安装了一个带特殊注释头的 JS 文件。这种“代码即应用”的模式让脚本生态比普通浏览器扩展更轻更快也让 Greasy Fork 成为目前比较活跃的用户脚本托管地之一。1.2 它真正解决的核心问题把“手动”变成“自动”浏览器本身是一个很称职的“浏览器”但它默认情况下相当被动。你打开同一个后台管理页面、点同一个按钮、复制同一段数据这些事情每天重复十次浏览器不会嫌烦你自己会嫌烦。用户脚本的意义就在于允许你把“每次都要做一遍”的操作写进一段脚本里让页面加载后自动执行。我在实际使用中最大的感受是脚本解决的往往不是那种惊天动地的功能而是极其琐碎的重复动作。比如某个后台页面每次都要展开侧边栏才能看到统计数字比如搜索结果页有很多固定的推荐区域干扰判断再比如某个文档站复制代码时自动多了一串版权尾巴。这些单次只需要两秒钟的操作乘以一天几十次就会变成负担。脚本就是把这些负担抹平的工具Greasy Fork 则是让这类工具能被人发现、安装、迭代的平台。1.3 适合谁不适合谁如果你只是偶尔用浏览器查查资料不太需要脚本安装管理器反而增加理解成本。但如果你是下面几类人Greasy Fork 值得花一个下午研究工作里依赖网页后台每天有大量表单填写、状态切换、信息核对的人喜欢在浏览器上折腾生产力工具的前端、产品、运营和数据分析师经常做网页信息收集需要导出、整理、格式化内容的人对网页体验有执念想给网站修掉某些“不合理默认行为”的人我个人的建议是不用急着把所有网页都脚本化先从一个真正让你烦躁的重复操作开始体验一次“页面自己帮你干活”的感觉后面自然会明白哪些场景值得投入。2. 用户脚本和浏览器扩展的底层差异决定了你用它的方式2.1 用户脚本在浏览器里到底干了什么用户脚本本质上是一段 JavaScript通过脚本管理器在指定页面加载时注入执行。它可以直接操作当前页面的 DOM网页结构、监听事件、修改样式、发起网络请求。由于它直接在页面的上下文里运行所以能做得非常“贴近现场”的事情比如把搜索结果里的某个DOM节点挪个位置、给网页按钮绑定新的点击事件、把页面中的数据抽出来重新组装。从浏览器的视角看脚本管理器的角色更像一个“中转站”。它读取脚本里的匹配规则决定哪些网站需要注入哪些代码。这个过程不需要重新打包浏览器扩展不需要等待商店审核改完核心代码之后管理器检测到脚本更新就会自动拉取新版本。这种机制带来的直接好处是迭代速度极快一个问题从发现到修复往往以小时计而不是以商店审核周期计。2.2 脚本和扩展的关键差异很多人会问浏览器扩展不是也能干这些事吗为什么还要用脚本我用下面的表格来对比一下对比维度浏览器扩展用户脚本形态打包完整的扩展应用包含 manifest、图标、后台页面一段带注释头的 JavaScript 文件安装途径通过浏览器应用商店上架通过脚本管理器安装Greasy Fork 这类托管站分发权限模型声明式权限列表权限和使用场景绑定通过 match、grant 等字段声明注入范围与 API 权限开发门槛需要了解扩展 API、打包发布流程懂 DOM 操作和一点 JavaScript 就能上手更新速度需要按商店流程重新审核脚本更新后管理器自动同步基本无审核等待对页面侵入性使用 content script隔离程度高直接在当前页面运行操作更直接但需要自己注意作用域我的经验是两者不是替代关系而是各有利弊。扩展胜在稳定和权限结构清晰适合做长期、复杂、跨页面的功能脚本胜在轻量和灵活适合针对特定网站做个性化增强。你完全可以在浏览器里同时用几个扩展再配几个脚本各管一摊。但如果你只是想让某个页面好用一点专门去写一个扩展确实有点杀鸡用牛刀脚本显然更合适。2.3 搞懂几个元数据字段接下来才看得懂脚本在 Greasy Fork 上点开任意一个脚本第一眼看到的就是头部注释也就是元数据。对于普通用户你不需要读懂全部但至少要认识这几个关键字段name脚本名称没什么好说的namespace脚本的命名空间一般用来区分同名脚本最好填一个独立标识version版本号脚本更新靠它判断match匹配的网页地址模式只有匹配到的页面才会注入脚本grant授权调用的 GM API比如 GM_setClipboard 表示可以访问剪贴板run-at脚本注入的时机比如 document-start 和 document-end对于一个使用脚本的人来说match 和 grant 是最值得关注的两个字段。match 决定了脚本的作用范围如果你在淘宝商品页装了一个脚本结果它的 match 是 https:///那就要警惕它是否在别的页面也会生效。grant 则反映了脚本要用多少“额外权限”有些脚本只操作 DOMgrant none 就够了没必要申请一堆 GM API。3. 从零到用上第一个脚本的完整路径3.1 先装一个脚本管理器Greasy Fork 上的脚本不会凭空跑到浏览器里你要先安装一个用户脚本管理器。目前最常用的三个是 Tampermonkey、Violentmonkey 和 Greasemonkey。我的建议是Chrome 系浏览器选 TampermonkeyFirefox 系浏览器选 Tampermonkey 或者 Violentmonkey 都行。Greasemonkey 现在已经相对少用了新手不必从它开始。安装管理器没什么特殊之处在浏览器自带的扩展商店里搜索对应的名字找到官方发布的那一个添加到浏览器即可。装好后浏览器工具栏会出现一个管理器的图标点击它能进入管理面板看到已安装脚本、更新情况、运行日志和设置项。一个很容易被忽略的点是脚本管理器本身也是扩展形式存在但它并不像普通扩展那样直接给网页加按钮或改样式它只提供“运行用户脚本”的环境。真正干活的是你在 Greasy Fork 上安装的那些脚本。3.2 在 Greasy Fork 上找脚本并安装打开 Greasy Fork 之后页面有搜索框也有分类和热门脚本列表。如果你要找特定网站的脚本直接搜网站名加空格加功能关键词比如“某网站 导出”或者“某网站 增强”。搜索结果的排序默认会综合考虑安装量、评分和更新时间我建议你在排序时重点关注最近更新时间和脚本版本一个长期没更新的脚本往往意味着它很可能已经失效。确定一个脚本后点进去先别急着安装。花两分钟看四样东西脚本的总安装数和近30天更新频率数据太难看就要留心用户评分和评论尤其是有没有最近“不好用”“失效了”的反馈版本号和最后更新时间和网站功能的变动周期对照一下match 字段确认作用范围符合预期看完之后点击页面右上角或侧边的“安装此脚本”绿色按钮管理器会弹出一个确认窗口里面会再次列出脚本名称、匹配范围、授权项。确认无误后点击安装脚本就进入管理器了。之后只要你访问匹配的网站脚本就会自动运行不需要每次手动操作。3.3 脚本的管理、更新与失效处理装好脚本后在管理器面板里可以随时启用、禁用、删除。我建议你按网站维度管理脚本一个网站尽量只保留你真正需要的两三个不然容易互相冲突。禁用和删除的最大区别是禁用只是暂时不执行删除则会被管理器从本地移除但下次你在 Greasy Fork 上还能重新安装所以大胆删没事。脚本更新是自动发生的管理器默认会定期检查 Greasy Fork 上的版本。更新前管理器会提示新版本的改动内容尤其要留意它是否扩大了 match 范围、增加了 grant 权限。有些脚本作者会在更新说明里写清楚改动有些写得比较模糊这种情况下我通常会先去 Greasy Fork 看看最近评论再决定是否更新。脚本失效是绕不过去的问题。网站改版是最常见的失效原因页面结构一变原来的选择器匹配不到元素脚本就静默失败了。遇到这种情况你可以先看看 Greasy Fork 评论里有没有人反馈有的话等作者更新没有的话可能需要自己学着改代码这也是我后来决定认真学写脚本的第一推动力。4. 实测下来最值得脚本化的几个场景4.1 页面增强与阅读优化用最少的代码做最有体感的事我最早接触用户脚本是因为一个让我崩溃的阅读体验某个技术文档站文章内容很窄两侧大片留白图片还要点击才能看大图。用脚本把正文容器的最大宽度调大、图片加一个点击放大按钮之后阅读体验好了非常多。这种脚本通常只有几十行代码不需要网络请求也不申请高级权限只是改改样式和绑定事件属于最安全的范畴。类似这么改动的常见做法包括把页面的默认字体调成你更喜欢的中文字体去除页面上固定的悬浮广告位给深色背景的页面强制套一层护眼滤镜甚至只是把某个按钮固定在页面底部方便点击。你在 Greasy Fork 上搜“主题”或“样式”这类关键词能发现大量这种小而美的脚本。4.2 信息导出与工作流自动化真正值回时间投入的地方页面增强只是表面功夫用户脚本真正值钱的地方在于能帮你处理信息流。比如你每天要整理网页数据到表格里手动复制粘贴相当痛苦。用户脚本可以读取当前页面里的表格、列表或结构化数据把它们转换成 CSV 或 Markdown再通过剪贴板写出。这个流程从“打开网页、框选、复制、到表格里粘贴整理”变成“点一下按钮、直接粘贴”省下的不只是时间还有出错的概率。工作流自动化就更简单粗暴了。比如后台系统里每天要重复录入的信息脚本可以预填充默认值一个多步骤操作脚本可以自动完成前几步留你确认最后一步。这里我想特别强调一句自动化的价值在于把重复但必须有人的确认环节留给人而不是全流程无人化。把最后一步留给你自己能避免很多因为批量操作带来的不可逆后果。4.3 注意过度脚本化脚本不是越多越好我为不少网站装过脚本装到最后发现痛苦的源头不是网站难用而是脚本互相打架。两个脚本都在页面里插入浮动按钮结果一个把另一个盖住了两个脚本都监听同一个快捷键结果一个触发了另一个也触发。这种事情调试起来并不轻松。所以我的经验是每个网站在同一时间只保留一个主力脚本。如果发现一个脚本的功能覆盖了另一个果断卸载功能较弱的那一个。脚本化应该是一个持续做减法的过程而不是不断地加。你要的是一个能稳定帮你干活的半自动助手不是一个时不时捣乱的小孩。5. 脚本安全与授权边界不为方便牺牲安全5.1 Greasy Fork 的审核机制与它的局限性不少人对 Greasy Fork 有个误解以为上面的脚本都经过了官方的严格安全审核所以可以直接安装。实际上 Greasy Fork 有基本的内容审核和社区反馈机制但脚本毕竟是代码托管平台很难做到逐行审查也不可能对每个脚本的真实行为负责。它更像一个社区靠的是作者的自觉、使用者的反馈和评分机制来维持总体质量。这套机制决定了两个事实第一绝大多数主流脚本是透明公开的很多人盯着源码恶意脚本很难长期藏住第二仍然存在一定的风险尤其是那些安装量小、来源不明、授权范围很大的脚本。所以你不能把安全判断完全交给平台自己也得会看几眼。5.2 安装前先审查 match 和 grant看脚本源码对普通用户可能有点门槛但看元数据几乎是零门槛。装任何脚本之前打开管理器的详情面板或者 Greasy Fork 的代码页确认两件事match 是否具体到目标网站。比如脚本是针对“某网站的结果页”写的那么 match 应该是 https://example.com/results/而不是 https://example.com/更不是 https:///grant 是否申请了不必要的能力。如果脚本只是改页面样式却申请了 GM_xmlhttpRequest跨域请求你就要多问一句为什么我把一些值得警惕的信号整理成了一份快速检查列表风险信号解释match 使用 https:///或 http:///脚本会在几乎所有网站运行需要特别谨慎grant 申请了 GM_xmlhttpRequest可以跨域发送请求可能把当前页面数据回传到其他服务器require 引用了外部 JS 文件脚本主体之外还有一段外部代码审核风险变高代码中存在明显的账号、密码、Token 相关字符串有潜在的信息收集行为评论中存在“账号异常”“收到验证码”等反馈可能是大量用户共同遭遇的问题信号5.3 运行中的观察装完不等于万事大吉即使安装前检查过安装后也要留个心眼。一个新的用户脚本首次运行时我会特别留意页面上发生了什么变化、有没有多出不明请求、账号状态有没有异常。一些恶意脚本会延迟触发比如安装几天后才开始有异常行为所以不要因为“刚装完没事”就彻底放松。还有个容易被忽略的坑同一个脚本可能在某次更新后被插入了恶意代码。Greasy Fork 上有不少脚本是多人维护或多作者 fork 的某个分支的新版本和旧版本行为可能并不一致。更新前我习惯于对比一下版本号如果脚本从 1.0 跳到 2.0改动通常很大那更要看评论和源码。5.4 权限最小化给自己立一条使用规则我一直坚持一条规则再方便的工具也不值得拿自己在网页端的隐私和账号安全去换。脚本的权限最小化原则其实很简单——能只作用在一个网站就不要让它作用到全网能只读取页面元素就不要给它跨域请求的权限能用浏览器原生能力解决就不要用 GM API。事实上 Greasy Fork 上很多有价值的脚本都是非常克制的作者会在元数据里把 grant 设置成 none 或者只申请最小权限并且在脚本介绍里说明自己的数据使用情况。这种脚本用起来最放心。相反如果一个脚本明明没必要申请很多权限却偏偏大幅声明不管它宣传的体验有多好我都建议你换一个替代品。6. 自己动手写第一个用户脚本并发布到 Greasy Fork6.1 用户脚本的基本骨架一段注释头加一段执行代码当你用脚本次数多起来总会遇到一个“改一点点就完美”的需求这时候自己动手是很好的选择。用户脚本的结构非常简单最外层是一个 JS 文件文件开头的注释块声明元数据注释之后是实际运行的代码。一个最基础的脚本骨架长这样// UserScript // name 我的第一个脚本 // namespace com.example.my-script // version 0.1 // description 这是一个示例脚本 // match https://example.com/* // grant none // run-at document-end // /UserScript (function () { use strict; // 这里写你要执行的代码 console.log(脚本已启动); })();这个骨架最重要的事情有两个一是 match 必须写对二是整个执行逻辑最好包在一个 IIFE立即执行函数里避免污染页面自带的全局变量。哪怕你只是初学 JavaScript也可以把这段结构当模板保存以后每次新建脚本都从它开始改。6.2 一个可以立刻上手的例子页面标题复制按钮我拿一个实际做过的小脚本做例子。当时我有一个使用场景每天要反复打开一些项目文档记录文档标题和链接地址。手动复制标题再复制链接两步操作说不上累但是架不住次数多。于是我用脚本在页面右上角放了一个按钮点击一次就把“标题 空格 链接”复制到剪贴板。实现代码大致如下// UserScript // name 一键复制页面标题 // namespace com.example.copy-title // version 0.1 // description 在页面右侧添加一个按钮点击复制标题和链接 // match https://*/* // grant none // run-at document-end // /UserScript (function () { use strict; const button document.createElement(button); button.textContent 复制标题; button.style.position fixed; button.style.top 80px; button.style.right 12px; button.style.zIndex 99999; button.style.padding 4px 10px; button.style.cursor pointer; button.addEventListener(click, function () { const text document.title - location.href; const textarea document.createElement(textarea); textarea.value text; document.body.appendChild(textarea); textarea.select(); document.execCommand(copy); document.body.removeChild(textarea); button.textContent 已复制; setTimeout(function () { button.textContent 复制标题; }, 1500); }); document.body.appendChild(button); })();这个脚本不长但你能从中理解用户脚本最常见的套路创建 DOM 元素、绑定事件、修改页面内容、利用原生 API 完成操作。浏览器 API 在这里和普通网页开发几乎一致区别只在于脚本可以附加到任何匹配的页面上。6.3 调试脚本的三板斧写完脚本后最常遇到的是两种情况脚本没起作用或者起作用的时机不对。我先说调试的基本思路。第一步先确认 match 和 run-at。我踩过最多的坑就是 match 写得太严格比如目标网站实际域名带了二级前缀而我写的匹配规则没包含脚本自然不运行。第二步打开浏览器开发者工具的 console 面板看有没有报错。用户脚本报错信息通常会带上脚本文件名沿着堆栈信息能很快定位到问题行。第三步在脚本里手动加 console.log 输出关键变量确认你的选择器是否真能选中目标元素比如 document.querySelector 返回的值是不是 null。一个很实际的建议不要一开始写长脚本先写一个只有 console.log 的最小版本确认注入成功再逐步添加 DOM 操作确认元素能找到最后再加事件、逻辑、异步处理。小步小步地验证远比一次写完再面对一堆错误高效。6.4 发布到 Greasy Fork 和维护时需要注意的细节脚本在本地测试通过之后就可以考虑发布到 Greasy Fork 上让更多人使用。发布时要填几项基础信息脚本名称、描述、主页地址、支持的语言和许可证。描述不要只写“优化网站体验”尽量说清楚这个脚本解决了什么问题、影响哪些页面这样搜索匹配更准确也能减少用户安装后的预期落差。发布之后脚本的维护才是重点。网站改版后脚本失效是最常见的反馈来源。你在脚本里用越具体的选择器失效概率越大用越语义化的选择器比如根据 data 属性、模块类名判断抗改版能力越强。前期写代码时稍微注意一点能减少很多后期的更新频率。另外发布到 Greasy Fork 的脚本默认是公开的其他人可以提问题、反馈 bug也可能 fork 你的代码做改进。这是社区运作的正常方式不必敌视反而要善用反馈。合理地回复评论、保持版本更新频率、在代码里写清楚改动记录这些看起来不起眼的动作决定了你的脚本能不能被更多人信任。回看我这些年用脚本和写脚本的经历最大的收获倒不是省了多少时间而是学会了一种思路任何重复出现的网页操作都有被自动化的可能。Greasy Fork 的价值正在于它把这股力量开放给了所有人你不需要成为编程高手只需要会找、会装、会辨别就能享受脚本生态带来的便利。如果你还在犹豫从哪里开始我建议先找一个烦躁了两周以上的网站操作去 Greasy Fork 搜一下装一个无权限或极低权限的脚本试试看大概率会打开一扇新大门。