tampermonkey 中文文档 下载 App

用户脚本的 grant 权限声明与 none 模式的含义

@grant 是脚本头部里「要什么权限」的声明。官方文档的定义:**用于把 GM_* 函数、unsafeWindow 对象以及部分强大的 window 函数加入白名单**。

声明写法

脚本要用什么,就列什么:

// @grant GM_setValue
// @grant GM_getValue
// @grant GM.setValues
// @grant GM_setClipboard
// @grant unsafeWindow
// @grant window.close
// @grant window.focus
// @grant window.onurlchange

官方特别说明:关闭标签页、聚焦窗口这类「强力」的 window 能力,也要走 @grant 声明。

grant none:关闭沙箱

// @grant none

none 的含义是沙箱被关闭:

不写 grant 会怎样

官方文档明确区分了「不写」与「none」:不写 @grant 视为空列表,这与 none 不同——空列表意味着脚本仍运行在沙箱里,只是没申请任何 GM 函数,GM_setValue 之类的调用会失败。

选择标准

脚本要做什么grant 选择
只改 DOM、改样式none 或空列表
存数据、跨域请求、剪贴板、通知列出对应 GM 函数
要读页面自己的 JS 变量unsafeWindow(运行环境细节见官方文档 @sandbox 条目)

安装确认页与 grant 的关系

安装脚本时确认页展示的「权限」就是 @grant 列表:列表越长,脚本对浏览器能力的索取越多。看到与脚本功能明显无关的申请(一个改字体的脚本要跨域请求),按脚本安全判断的要求多留个心眼。

相关页面