Tampermonkey 权限清单逐条解读:为什么需要这些权限
装扩展时浏览器会列一串权限申请,很多人直接点「接受」。Tampermonkey 的权限官方 FAQ Q304 有逐条说明——看懂它们,才能判断扩展行为是否透明。
官方列出的权限与用途
| 权限 | 官方给出的用途 |
|---|---|
| notifications | GM_notification 桌面通知、扩展相关通知 |
| tabs | 找到活动标签页;导航、新建与关闭标签页(GM_openInTab 底层) |
| idle | 避免在你打游戏时弹更新通知 |
| webNavigation | 安装用户脚本、检查 URL 是否命中脚本 |
| webRequest / webRequestBlocking | 安装用户脚本、URL 匹配检查、为 GM_xmlhttpRequest 修改请求细节 |
| storage | 存储你的用户脚本 |
| unlimitedStorage | 脚本与数据可能很大,不受常规配额约束 |
官方同时说明:部分权限在某些浏览器上是可选授权,用到了才需要你授予——脚本触发下载时的权限弹窗就是典型(见下载函数)。
为什么「能访问所有网站」
装的时候最扎眼的提示是「读取和更改您在所有网站上的数据」。官方 FAQ Q300 的解释:Tampermonkey 不知道你的脚本会声明哪些网址,所以必须具备进入任何页面的能力,才能把脚本注入到匹配处;这与广告拦截类扩展的道理相同。你可以在应用商店的扩展详情里查看「此扩展可以访问」的声明原文。
实际访问范围还受两层约束:Site Access 设置(见Site Access 限制)与黑名单(见黑名单)。
权限、grant、connect 三层的关系
- 扩展权限(本页):浏览器授予 Tampermonkey 的能力上限;
@grant:单个脚本向 Tampermonkey 申请用哪些 GM 函数(见grant 权限);@connect:单个脚本的跨域请求域名清单,外加用户确认弹窗(见跨域确认弹窗)。
权限是「总闸」,grant 与 connect 是「每个脚本的分闸」——扩展权限给了能力,不代表每个脚本都在用。
权限相关的常见疑问
- 「Limited runtime host permissions」警告:不是权限被滥用,而是 Site Access 被收窄导致功能受限,方向相反,见Site Access 限制;
- 权限会变吗:扩展大版本升级可能调整权限申请,浏览器会再次提示,留意弹窗内容即可。
具体权限清单以官方 FAQ 与应用商店详情页的当前版本为准。