Develop Userscripts

作者 xixu-me498ed6f26cc3无许可证收录于 2026年10月8日更新于 2026年10月8日

Use when building, debugging, packaging, or publishing browser userscripts for Tampermonkey or ScriptCat, including GM APIs, metadata blocks, permission issues, @match/@grant/@connect setup, ScriptCat background or scheduled scripts, UserConfig blocks, or subscription workflows.

AI 生成的概览

指导构建、调试、打包和发布 Tampermonkey 或 ScriptCat 浏览器用户脚本,包括元数据与 GM API。

功能
该技能提供面向 Tampermonkey 和 ScriptCat 的浏览器用户脚本开发说明。内容涵盖运行时选择,包括可移植的前台脚本、ScriptCat 后台或定时脚本以及订阅包,并涉及 @match、@grant、@connect、@run-at 等元数据配置。它还给出调试步骤、发布模式、常见错误,以及两个关于元数据/API 映射和 ScriptCat 扩展的参考文件。
适用场景
适用于编写或修复 Tampermonkey 或 ScriptCat 用户脚本、调试注入时机、权限、CSP 或 GM API 行为,以及在前后台与定时运行时之间做选择。也用于添加 UserConfig 设置或打包 ScriptCat 订阅包。
运行要求
不附带脚本,仅为说明文档。需要 Tampermonkey 或 ScriptCat 等用户脚本管理器以及浏览器,并引用两个随附的 Markdown 参考文件。

Userscript work usually breaks at the runtime and metadata boundary, not in the page logic. Choose the runtime first, declare the minimum permissions up front, then debug in the environment where the script actually runs.

When to Use

Use this skill for:

  • writing or fixing a Tampermonkey or ScriptCat userscript
  • debugging injection timing, missing permissions, CSP workarounds, update checks, or GM_* behavior
  • deciding between a portable foreground script and ScriptCat-only @background or @crontab
  • adding config UI with ==UserConfig==
  • packaging a ScriptCat ==UserSubscribe== bundle or preparing a CloudCat-compatible script

Do not use this skill for full browser extension development or general browser automation outside userscript managers.

Runtime Selection

dot
digraph userscript_runtime {    "Need page DOM or page context?" [shape=diamond];    "Need persistent or scheduled work?" [shape=diamond];    "Need to install many scripts as one package?" [shape=diamond];    "Portable foreground script" [shape=box];    "ScriptCat background or crontab script" [shape=box];    "ScriptCat subscription package" [shape=box];
    "Need page DOM or page context?" -> "Portable foreground script" [label="yes"];    "Need page DOM or page context?" -> "Need persistent or scheduled work?" [label="no"];    "Need persistent or scheduled work?" -> "ScriptCat background or crontab script" [label="yes"];    "Need persistent or scheduled work?" -> "Need to install many scripts as one package?" [label="no"];    "Need to install many scripts as one package?" -> "ScriptCat subscription package" [label="yes"];    "Need to install many scripts as one package?" -> "Portable foreground script" [label="no"];}

Preflight

  • Confirm the manager and browser. On Manifest V3 browsers, ScriptCat may require Allow User Scripts or browser developer mode before scripts run.
  • Decide page script versus background script before writing code. ScriptCat background scripts cannot touch the DOM.
  • Start with metadata, not implementation: @match, @grant, @connect, @run-at, and any update URLs.
  • Prefer portable ==UserScript== patterns for ordinary page scripts. Only switch to ScriptCat-only headers when the requested behavior actually needs them.

Workflow

  1. Choose the runtime and metadata first.
  2. Declare the smallest permission surface that fits the task.
  3. Implement against the runtime you chose.
  4. Debug where the code really runs.
    • Foreground scripts: page console plus manager logs.
    • ScriptCat background scripts: run log first, then background.html for real-environment debugging.
  5. Publish with the right update model.
    • Normal scripts: keep @version accurate and add @updateURL or @downloadURL only when needed.
    • Subscription bundles: use ==UserSubscribe==, HTTPS URLs, and subscription-level @connect.

Quick Reference

IntentDefault choiceWatch for
Page UI, DOM scraping, page patchingPortable ==UserScript==@match, @grant, @run-at, CSP-sensitive injection
Cross-origin API accessGM_xmlhttpRequest with explicit @connectMissing hosts, cookie behavior differences, user authorization
Long-running workerScriptCat @backgroundNo DOM, must return Promise for async work
Scheduled taskScriptCat @crontabOnly first @crontab counts, prefer 5-field cron, avoid interval overlap
User-editable settings==UserConfig== plus GM_getValueBlock placement and group.key naming
Silent bundle install and updates==UserSubscribe==HTTPS, user.sub.js, subscription connect overrides child scripts

Common Mistakes

  • Missing @grant for APIs the script actually uses.
  • Missing @connect for hosts used by GM_xmlhttpRequest or GM_cookie.
  • Treating @include as a better default than @match for ordinary host targeting.
  • Using DOM APIs inside ScriptCat background or cron scripts.
  • Returning from a ScriptCat background script before async GM work is truly finished.
  • Mixing ==UserScript== and ==UserSubscribe== packaging concepts.
  • Putting ==UserConfig== in the wrong place or reading config keys without the group.key name.
  • Assuming Tampermonkey and ScriptCat storage, notification, or request behavior is identical.

References

  • references/metadata-and-api-map.md
  • references/scriptcat-extensions.md

来源与署名

来源:xixu-me/skills位于skills/develop-userscripts提交498ed6f

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架