SKILL.md
只读
名称
develop-userscripts
描述
用于构建、调试、打包或发布 Tampermonkey 或 ScriptCat 的浏览器用户脚本,包括 GM API、元数据块、权限问题、@match/@grant/@connect 设置、ScriptCat 后台或定时脚本、UserConfig 块或订阅工作流。
用户脚本的问题通常出现在运行时和元数据的边界,而非页面逻辑。先选择运行时,提前声明最小权限,然后在脚本实际运行的环境中进行调试。
何时使用
使用此技能的场景:
- 编写或修复 Tampermonkey 或 ScriptCat 用户脚本
- 调试注入时机、权限缺失、CSP 绕过、更新检查或
GM_*行为 - 在可移植前台脚本和 ScriptCat 独有的
@background或@crontab之间做出选择 - 使用
==UserConfig==添加配置界面 - 打包 ScriptCat 的
==UserSubscribe==包或准备兼容 CloudCat 的脚本
不要将此技能用于完整的浏览器扩展开发或用户脚本管理器之外的通用浏览器自动化。
运行时选择
digraph userscript_runtime {
"需要页面 DOM 或页面上下文?" [shape=diamond];
"需要持久化或定时工作?" [shape=diamond];
"需要将多个脚本打包安装?" [shape=diamond];
"可移植前台脚本" [shape=box];
"ScriptCat 后台或定时脚本" [shape=box];
"ScriptCat 订阅包" [shape=box];
"需要页面 DOM 或页面上下文?" -> "可移植前台脚本" [label="是"];
"需要页面 DOM 或页面上下文?" -> "需要持久化或定时工作?" [label="否"];
"需要持久化或定时工作?" -> "ScriptCat 后台或定时脚本" [label="是"];
"需要持久化或定时工作?" -> "需要将多个脚本打包安装?" [label="否"];
"需要将多个脚本打包安装?" -> "ScriptCat 订阅包" [label="是"];
"需要将多个脚本打包安装?" -> "可移植前台脚本" [label="否"];
}
前置检查
- 确认管理器和浏览器。在 Manifest V3 浏览器上,ScriptCat 可能需要启用
Allow User Scripts或浏览器开发者模式才能运行脚本。 - 在编写代码前决定是页面脚本还是后台脚本。ScriptCat 后台脚本无法操作 DOM。
- 从元数据开始,而非实现:
@match、@grant、@connect、@run-at以及任何更新 URL。 - 对于普通页面脚本,优先使用可移植的
==UserScript==模式。仅在所需行为确实需要时,才切换到 ScriptCat 独有的头部。
工作流
- 首先选择运行时和元数据。
- 声明满足任务的最小权限集。
- 根据所选运行时实现代码。
- 在代码实际运行的环境中调试。
- 前台脚本:页面控制台加管理器日志。
- ScriptCat 后台脚本:先查看运行日志,然后使用
background.html进行真实环境调试。
- 使用正确的更新模型发布。
- 普通脚本:保持
@version准确,仅在需要时添加@updateURL或@downloadURL。 - 订阅包:使用
==UserSubscribe==、HTTPS URL 和订阅级别的@connect。
- 普通脚本:保持
快速参考
| 意图 | 默认选择 | 注意事项 |
|---|---|---|
| 页面 UI、DOM 抓取、页面补丁 | 可移植 ==UserScript== |
@match、@grant、@run-at、CSP 敏感的注入 |
| 跨域 API 访问 | 显式 @connect 的 GM_xmlhttpRequest |
缺失的主机、cookie 行为差异、用户授权 |
| 长时间运行的 Worker | ScriptCat @background |
无 DOM,异步工作必须返回 Promise |
| 定时任务 | ScriptCat @crontab |
仅第一个 @crontab 生效,优先使用 5 字段 cron,避免间隔重叠 |
| 用户可编辑设置 | ==UserConfig== 加 GM_getValue |
块位置和 group.key 命名 |
| 静默安装和更新包 | ==UserSubscribe== |
HTTPS、user.sub.js、订阅 connect 覆盖子脚本 |
常见错误
- 脚本实际使用的 API 缺少
@grant。 GM_xmlhttpRequest或GM_cookie使用的主机缺少@connect。- 对于普通主机匹配,将
@include视为比@match更好的默认选项。 - 在 ScriptCat 后台或定时脚本中使用 DOM API。
- 在异步 GM 工作真正完成之前就从 ScriptCat 后台脚本返回。
- 混淆
==UserScript==和==UserSubscribe==的打包概念。 - 将
==UserConfig==放在错误的位置,或未使用group.key名称读取配置键。 - 假设 Tampermonkey 和 ScriptCat 的存储、通知或请求行为完全相同。






