跳到正文
产品约 1 分钟

用户脚本运行时

两套执行引擎、元数据匹配、GM API 与权限模型。

更新于 2025年11月6日约 1 分钟编辑此页
本页目录

Lumo Userscripts 通过原生 chrome.userScripts API 注册每个脚本。运行时有两套引擎:页面世界 runner 与隔离的 USER_SCRIPT host。两者都通过带 nonce 的 MessageChannel 与扩展通信。同一个管理器还可以选择通过 MCP 暴露脚本,见 连接智能体。

执行模型#

引擎世界适用场景
us-runnerMAIN需要页面真实 window,或声明 @grant unsafeWindow 的脚本。
us-hostUSER_SCRIPT需要与页面全局隔离,同时仍使用 GM API 的脚本。

@inject-into page 与 @grant none 的脚本运行在页面世界。USER_SCRIPT 脚本拿到隔离世界的 window,无法提供同步的页面对象。

元数据#

脚本头typescript
// ==UserScript==// @name        GitHub focus mode// @namespace   https://example.com/// @version     1.4.2// @match       *://*.github.com/*// @run-at      document-idle// @grant       GM_setValue// @grant       GM_getValue// ==/UserScript==

管理器在保存时校验元数据,支持 @match / @include / @exclude 的 glob 与正则规则,并把相对 @require / @resource URL 解析到安装来源。

GM API#

  • 值:GM_setValue、GM_getValue、GM_deleteValue、GM_listValues。
  • 网络:GM_xmlhttpRequest 用于跨域请求。
  • 浏览器:GM_cookie、GM_download、GM_notification、GM_setClipboard。
  • 页面:GM_addStyle、GM_addElement、unsafeWindow。
  • 外壳:GM_registerMenuCommand、标签页状态与 Promise 化的 GM.* 别名。

权限#

权限用途
userScripts通过 Chrome 原生 API 动态注册。
storage, unlimitedStorage设置与有界元数据。
tabs, activeTab, webNavigation, scripting标签页上下文与诊断。
declarativeNetRequest把 .user.js 导航重定向到安装页。
cookies, downloads支撑 GM_cookie 与 GM_download。
notifications, contextMenus, alarms, clipboardWriteGM API 与后台任务。

更新会检查权限

如果新版本需要更多访问权,更新会等待用户决定。管理器绝不会悄悄扩大脚本的触达范围。