GM API 参考
PageMod 实现了标准 Greasemonkey API(GM_*)。用户脚本通过在 @grant 中声明需要的 API 来获取对应权限。详见 Tampermonkey 官方文档。
需要 @grant 声明的 API
| API | 功能 |
|---|---|
GM_setValue(key, value) | 存储键值对数据(浏览器本地,按脚本隔离) |
GM_getValue(key, default?) | 读取存储的数据 |
GM_deleteValue(key) | 删除存储的数据 |
GM_listValues() | 列出脚本存储的所有键名 |
GM_xmlhttpRequest(details) | 发起跨域 HTTP 请求(不受浏览器同源策略限制) |
GM_cookie(action, details) | 读取/设置/删除 Cookie(action: 'list'/'set'/'remove') |
GM_setClipboard(text, type?) | 将文本写入系统剪贴板 |
GM_notification(text, title?, image?, onclick?) | 显示桌面通知 |
GM_openInTab(url, options?) | 在新标签页中打开 URL |
GM_download(url, name?) | 下载文件到本地 |
GM_registerMenuCommand(name, fn, accessKey?) | 注册右键菜单项 |
GM_addValueChangeListener(key, callback) | 监听存储值的变化(跨标签页同步) |
无需 @grant 的 API
| API | 功能 |
|---|---|
GM_info | 获取脚本元数据(名称、版本、命名空间等) |
GM_addStyle(css) | 向页面注入 CSS 样式 |
GM_addElement(parent, tag, attributes?) | 创建 DOM 元素(支持 script/link/style 等任意标签) |
GM_log(...messages) | 向控制台输出日志 |
unsafeWindow | 访问页面原始的 window 对象 |
通信机制
GM API 调用通过 performance CustomEvent 在 MAIN world(用户脚本)和 ISOLATED world(Content Script)之间传递,再由 Content Script 通过 chrome.runtime.sendMessage 转发到 Service Worker 后台执行。这种架构保证了用户脚本与扩展代码之间的安全隔离。