🔥 油猴脚本开发指南:从基础API到发布全流程

写此文章的起因是自己会在工作的闲暇之余习惯性的刷刷掘金的沸点吃吃瓜,但是因为我工位升降台比较高,每次领导或者同事从我身后路过时,总有一种自己摸鱼被抓的感觉,摸鱼都摸的不痛快。

掘金首页打开黑暗模式后跳转沸点详情页等页面黑暗模式失效,感觉这是系统bug,就算是反馈bug也需要处理时间,不如自己直接写个油猴脚本来解决这个问题。脚本链接

一个完整的油猴脚本包括元数据和控制代码两个部分,其中元数据是用来声明脚本的名称、版本、生效的网址规则以及一些脚本执行所需要的前置信息等,控制代码就是脚本的主逻辑信息。

一: 元数据配置:你必须知道的完整规则

1.1 核心指令详解

js 复制代码
// ==UserScript==
// @name         脚本名称(必填)
// @namespace    命名空间(建议用域名)
// @version      版本号(必填,如1.0.0)
// @description  描述(必填,简短说明)
// @author       作者
// @match        URL匹配规则(必填)
// @exclude      排除URL
// @grant        特殊API权限
// @require      外部JS依赖
// @icon         脚本图标URL
// @connect      允许跨域访问的域名
// @run-at       脚本注入时机
// @license      MIT (建议MIT)
// ==/UserScript==

1.2 @match规则深度解析

js 复制代码
// 匹配知乎所有页面
@match *://www.zhihu.com/*

// 匹配HTTPS协议的百度搜索页
@match https://www.baidu.com/s?*

// 匹配子域名
@match *://*.google.com/*

// 匹配URL带hash的情况
@match *://example.com/path#*

// 精确匹配特定路径
@match *://example.com/exact/path

常见踩坑点​​:

  • ❌ 错误:@match www.example.com(缺少协议)
  • ✅ 正确:@match *://www.example.com/*
  • ❌ 错误:@match *://example.com/path(缺少结尾通配符)
  • ✅ 正确:@match *://example.com/path*

1.3 @grant权限系统完全指南

js 复制代码
// 存储相关
@grant GM_setValue
@grant GM_getValue
@grant GM_deleteValue
@grant GM_listValues

// 网络请求
@grant GM_xmlhttpRequest
@grant GM_download

// 界面操作
@grant GM_notification
@grant GM_setClipboard

权限使用示例​​:

js 复制代码
// 存储数据
GM_setValue('token', 'abc123');
const token = GM_getValue('token');

// 跨域请求
GM_xmlhttpRequest({
  method: "GET",
  url: "https://api.example.com/data",
  onload: function(response) {
    console.log(response.responseText);
  }
});

二、脚本逻辑编写技巧

DOM操作

js 复制代码
// 错误示范(直接操作可能失败)
document.querySelector('.btn').click();

// 正确做法(等待DOM加载)
function waitForElement(selector, callback) {
  if (document.querySelector(selector)) {
    callback();
  } else {
    setTimeout(() => waitForElement(selector, callback), 500);
  }
}

waitForElement('.btn', () => {
  document.querySelector('.btn').click();
});
// 或者使用MutationObserver监听DOM变化
const observer = new MutationObserver(() => {
    const btn = document.querySelector('.load-more');
    if(btn) btn.click();
});
observer.observe(document.body, { childList: true, subtree: true });

使用GM函数

js 复制代码
// 跨域请求
GM_xmlhttpRequest({
    method: "GET",
    url: "https://api.example.com/data",
    onload: function(response) {
        console.log(response.responseText);
    }
});

// 存储数据
GM_setValue('lastVisit', new Date().toISOString());
const lastVisit = GM_getValue('lastVisit', '从未访问');

三、发布全流程详解(GreasyFork为例)

如果不声明@license 发布时会有弹窗警告,建议MIT

相关推荐
w2sfot7 分钟前
【JS加密在线】jsjiami.online(让JavaScript 更安全!)
开发语言·javascript·安全
HSunR7 分钟前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库
拆房老料1 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
Solis程序员1 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明2 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8882 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
粥里有勺糖3 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
xy34533 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计
不停喝水3 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
一水鉴天4 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css