编写说明
本站发布的脚本给坤坤浏览器安装。客户端接近油猴,但不是完整桌面版。发布前用下面的规则自查,能少踩安装失败和更新不生效。
发布
- 注册并登录。
- 打开「发布」,把完整源码贴进去。源码必须自带 ==UserScript== 头。
- 更新时打开该脚本的「发布新版本」,再贴一份新源码。不要改脚本 ID,否则已安装的用户收不到更新。
每人最多 50 个脚本。下架后安装链接返回 404,搜索里也不会出现。
最小可用脚本
// ==UserScript==
// @name 示例脚本
// @namespace https://scripts.ikunbrowser.com
// @version 1.0.0
// @description 在示例页面加一行字
// @match https://example.com/*
// @grant none
// ==/UserScript==
(function () {
document.body.insertAdjacentHTML("beforeend", "<p>示例脚本已运行</p>");
})();
元数据
至少要有 @name,以及 @match 或 @include 之一。
| 字段 | 说明 |
|---|---|
@name | 优先用没有语言后缀的名字。只有 @name:zh-CN 这类本地化名时,用第一条。 |
@namespace @version @description | 建议都写。@description:xx 只在没有默认描述时回退。 |
@match | Chrome 匹配,可用 *://、*.example.com、<all_urls>。 |
@include @exclude | 通配 * ?,或 /正则/i。 |
@exclude-match | 按 match 规则排除。 |
@run-at | document-start / document-end / document-body / document-idle。不写则是 idle。 |
@noframes | 子框架里不运行。 |
@grant | 未知权限不会导致安装失败。没实现的函数存在,但是空操作。 |
@require @resource | 只能是 http 或 https。各最多 8 个。data:、file:、相对路径会安装失败。 |
@connect @icon @author | 客户端忽略,不影响安装。 |
匹配、排除规则各最多 64 条。@require 每个不超过 512KB,合计约 1MB。@resource 每个不超过 256KB。
更新
客户端不做语义化版本比较。新脚本的 @version 去掉首尾空白后,必须和当前版本的字符串不同,用户手动检查更新才会换脚本。两个版本都空着,也算没变。
下发 /s/{id}.user.js 时,本站会在元数据块开头插入 @downloadURL 和 @updateURL,都指向这个地址。客户端只认第一条,所以不要依赖你自己写在后面的更新地址。不要把 @updateURL 指到 .meta.js,客户端会跳过这种地址。
浏览器不会在后台自动更新。用户在「设置 → 用户脚本」里手动检查。
安装链接
详情页的「安装」就是普通的 .user.js 链接。坤坤浏览器会拦截任何以 .user.js 结尾的 http(s) 地址并弹出确认框,不需要额外协议。
同一脚本、同一天、同一 IP 只计 1 次安装。
客户端能用的接口
同步的 GM_* 和 Promise 版 GM.* 都会注入。脚本跑在页面上下文里,unsafeWindow 就是页面的 window,没有独立沙箱。
| 接口 | 行为 |
|---|---|
GM_addStyle GM_addElement | 插样式或元素。 |
GM_getValue | 按脚本隔离,存在本地。单个值最多 32KB。变更监听只在当前页,不跨标签。 |
GM_xmlhttpRequest | 支持常见方法、arraybuffer / blob。请求体最多 256KB,响应最多 1MB。只能访问公网 http(s),本机地址会被拒绝。不走页面 JS,也不走浏览器代理。 |
GM_setClipboard GM_download GM_openInTab | 剪贴板、应用内下载确认、新标签打开 http(s)。 |
GM_getResourceText GM_getResourceURL | 读安装时缓存的资源。 |
GM_registerMenuCommand | 当前页注册了命令时,底栏会出现「脚本命令」。 |
GM_notification | 只显示提示,没有点击回调。 |
GM_getTab | 只是当前脚本进程里的内存对象,不是多窗口。 |
下面这些写了 @grant 也能装上,但函数什么都不做:GM_cookie、GM_webRequest,以及上表没列出的其它权限。不要依赖改请求或读写 Cookie。
运行时要注意
- 源码不超过 512KB。已安装脚本最多 64 个。
- 页面 CSP 禁止 unsafe-eval 时,脚本会静默失败。
- 单页应用切换地址时,新匹配到、且这次还没跑过的脚本会执行;已经跑过的不会重跑。
- document-start 在新开的标签里才比较完整。刚装完的当前页可能赶不上真正的页头时机。
- 主页和 about: 不注入。脚本报错会被吞掉,页面上看不到油猴那种运行日志。
什么样的脚本比较合适
适合改 DOM、加样式、存少量配置、偶尔发请求、剪贴板、下载文件、用菜单做开关,以及带一个 jQuery 这类 @require。
不适合强依赖 Cookie、拦截网络、必须精确卡在文档最开头、页面 CSP 很严,或者脚本和依赖特别大。