手写自定义脚本 — 从零写一个 JS 脚本跑在网页上
什么时候需要自己写脚本
场景:
- Greasy Fork 上找不到你想要的功能
- 你只需要对某个网站做一点点小修改(比如改个颜色、加个按钮)
- 你想学习一下用户脚本怎么工作
创建新脚本
- 设置 → 用户脚本 → 添加脚本 → 新建脚本
- 填写以下字段:
| 字段 | 说明 |
|---|---|
| 脚本名称 | 出现在脚本列表里的名字,自己定 |
| 脚本描述 | 一句话说明这个脚本做什么 |
| 匹配规则 | 指定脚本在哪些页面执行(@match / @include / @exclude) |
| JavaScript 代码区 | 实际执行的 JS 代码 |
| 执行时机 | 页面加载完成时?还是 DOM ready 时? |
最简单的脚本示例
比如你想在打开 example.com 时弹个提示框:
alert('XBrowser 自定义脚本已运行!');
匹配规则设成:
@match https://www.example.com/*
保存、启用,然后打开 example.com 就能看到弹窗。
匹配规则写法
@match(推荐)
标准格式,精确匹配 URL 模式:
@match https://*/* ← 所有 HTTPS 页面
@match https://*.baidu.com/* ← 百度旗下所有页面
@match *://*/* ← 所有页面(含 http/https)
@include
更宽松的模式匹配,支持通配符和正则的简化形式。XBrowser 对这两种都支持,但推荐用 @match 更清晰。
@exclude
排除某些页面。比如你想让脚本在所有页面跑,但排除百度:
@match *://*/*
@exclude https://*.baidu.com/*
执行时机
XBrowser 提供了几个执行时机选项:
| 时机 | 说明 |
|---|---|
| 文档开始加载 | 页面还没渲染就执行,适合早改 DOM |
| DOM 就绪后 | DOM 树构建完成但图片等资源可能还在加载,够用的默认值 |
| 文档加载完成 | 页面所有资源(图片、CSS、JS)都加载完,最慢 |
大多数脚本用「DOM 就绪后」就够。
调试小技巧
- 脚本报错不会弹窗,但可以在脚本里
console.log(...)然后用浏览器内置的开发者工具看(如果 XBrowser 版本有开发者工具入口) - 简单的 alert 可以快速知道脚本有没有执行到那一行
- 修改脚本后需要刷新页面才能重新执行
TamperMonkey 风格的自定义脚本
如果你想在自定义脚本里用 GM_* 函数(跨域请求、持久化存储等),XBrowser 也支持。把代码包装在标准 TamperMonkey 头部里即可:
// ==UserScript==
// @name 我的脚本
// @match *://*/*
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
// 脚本内容写在这里
这样就和 Greasy Fork 上的脚本格式完全一致了。