文章

浏览器插件开发中的权限

浏览器插件开发中的权限

在浏览器插件开发中,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 存储数据(分 localsync 作用域)。
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.pageeval
Firefox支持部分额外权限(如 mozillaAddons),URL 模式可直接放在 permissions 中。
Safari使用独立扩展系统(非 WebExtensions),权限模型不同。

总结

  • 完整列表 需参考官方文档:
  • 最佳实践
    1. 仅申请必要权限。
    2. 敏感权限(如 debugger)需明确告知用户用途。
    3. 动态请求可选权限以提升用户体验。
本文由作者按照 CC BY 4.0 进行授权