浏览器插件开发中的权限
浏览器插件开发中的权限
在浏览器插件开发中,permissions
字段的可选值取决于浏览器支持的 API 和功能。以下是 Chrome/Edge(Manifest V3) 和 Firefox 中常见的权限列表,按功能分类整理:
1. 浏览器功能权限
权限 | 作用 | API 示例 |
---|---|---|
activeTab | 临时访问当前激活标签页的 DOM(需用户点击插件图标触发)。 | chrome.tabs.executeScript |
tabs | 读取或操作浏览器标签页(获取 URL、标题、切换标签等)。 | chrome.tabs.query , chrome.tabs.update |
bookmarks | 操作浏览器书签(创建、删除、编辑)。 | chrome.bookmarks.create |
history | 访问和修改用户的浏览历史记录。 | chrome.history.search |
downloads | 管理文件下载(启动、暂停、取消)。 | chrome.downloads.download |
topSites | 读取浏览器常用站点(如新标签页显示的网站)。 | chrome.topSites.get |
sessions | 访问最近关闭的标签页或窗口。 | chrome.sessions.restore |
2. 数据与存储权限
权限 | 作用 |
---|---|
storage | 使用 chrome.storage API 存储数据(分 local 和 sync 作用域)。 |
cookies | 访问或修改浏览器的 Cookie(需配合 host_permissions 指定域名)。 |
clipboardRead | 读取剪贴板内容(敏感权限,通常需用户手势触发)。 |
clipboardWrite | 写入剪贴板(无需用户手势)。 |
unlimitedStorage | 突破 localStorage 的 5MB 限制(仅对扩展存储有效)。 |
3. 网络与通信权限
权限 | 作用 |
---|---|
webRequest | 拦截或修改网络请求(需配合 host_permissions 指定域名)。 |
webRequestBlocking | 阻塞网络请求直到插件处理完成(需与 webRequest 共用)。 |
proxy | 控制浏览器代理设置。 |
declarativeNetRequest | 动态修改网络请求规则(广告拦截类插件常用)。 |
nativeMessaging | 与本地应用程序通信(需配套安装本地宿主程序)。 |
4. 用户界面与系统集成
权限 | 作用 |
---|---|
contextMenus | 在浏览器右键菜单中添加自定义选项。 |
notifications | 显示系统通知。 |
geolocation | 获取用户的地理位置(需用户授权)。 |
alarms | 定时执行任务(即使插件休眠也能触发)。 |
idle | 检测用户设备空闲状态(如是否在活动)。 |
fontSettings | 管理浏览器字体设置。 |
pointerLock | 控制鼠标指针锁定(如全屏游戏场景)。 |
5. 敏感权限(需谨慎使用)
权限 | 风险提示 |
---|---|
debugger | 使用 Chrome 调试协议,可能被滥用。 |
management | 管理其他插件的安装和配置(高敏感度)。 |
privacy | 访问隐私相关设置(如跟踪保护)。 |
tts | 使用文本转语音功能朗读任意内容。 |
wallpaper | 修改系统壁纸(仅 Chrome OS 支持)。 |
6. Manifest V3 专属权限
权限 | 作用 |
---|---|
scripting | 动态注入或移除 JavaScript/CSS(替代 V2 的 tabs.executeScript )。 |
declarativeNetRequestFeedback | 获取网络请求拦截的调试信息。 |
sidePanel | 在浏览器侧边栏添加自定义面板(Chrome 114+)。 |
7. 权限声明示例
典型插件 manifest.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"manifest_version": 3,
"name": "权限示例插件",
"version": "1.0",
"permissions": [
"activeTab",
"storage",
"contextMenus",
"notifications",
"https://api.example.com/*" // 错误:URL 模式应放在 host_permissions
],
"host_permissions": [
"https://api.example.com/*" // 正确:声明可访问的域名
]
}
8. 动态权限管理
插件可以运行时请求权限(需用户确认):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 请求新权限
chrome.permissions.request({
permissions: ['history'],
origins: ['https://example.com/*']
}, (granted) => {
if (granted) console.log("权限已授予");
});
// 检查权限
chrome.permissions.contains({
permissions: ['tabs']
}, (result) => {
console.log("是否有 tabs 权限:", result);
});
9. 浏览器差异说明
浏览器 | 注意事项 |
---|---|
Chrome/Edge | 强制 Manifest V3,禁用 background.page 和 eval 。 |
Firefox | 支持部分额外权限(如 mozillaAddons ),URL 模式可直接放在 permissions 中。 |
Safari | 使用独立扩展系统(非 WebExtensions),权限模型不同。 |
总结
- 完整列表 需参考官方文档:
- 最佳实践:
- 仅申请必要权限。
- 敏感权限(如
debugger
)需明确告知用户用途。 - 动态请求可选权限以提升用户体验。
本文由作者按照 CC BY 4.0 进行授权