最后更新 2026-06-30
本页解释扩展 manifest.json 中每个权限为什么需要。主要面向 Chrome Web Store / Edge Add-ons 的审核人员,以及希望自行核对扩展没多要权限的用户。
nativeMessaging为什么需要。Wisp 的全部用途是把 Nephele Workshop 桌面应用和浏览器之间的上传请求中转过去。Chromium 桌面 ↔ 扩展 IPC 的标准通道就是 Native Messaging。没有这个权限 Wisp 无法从桌面端接到任何工作。
使用范围。Wisp 只连接已注册的 Native Messaging Host com.arisfusion.nephele_wisp。这个 host 的 manifest 由 Nephele Workshop 安装程序安装,指向 nephele.exe --nmh 二进制。Wisp 不连接任何其他 native host。
storage为什么需要。Wisp 持久化一个值:一个随机生成的 per-profile ID(wp_<uuid>),handshake 时发给桌面端用于识别同一浏览器配置的重复连接。
使用范围。仅使用 chrome.storage.local,仅写一个 key(wisp_profile_id)。不存储任何用户内容。
debugger为什么需要。Wisp 通过 Chrome DevTools Protocol(CDP)合成输入事件来驱动上传表单。这是 Chromium 唯一被记录的、产生平台识别为用户驱动的输入事件的机制,同时保持明显的用户主动性:Chrome 会在 Wisp 接管的每个 tab 顶部持久显示黄色 “Nephele Wisp 开始调试此浏览器” 通知条。
有两个具体的自动化问题必须用 debugger,没有替代方案:
Page.addScriptToEvaluateOnNewDocument fallback 到传统 <input type="file">,然后用 DOM.setFileInputFiles 投递文件路径。标准 chrome.scripting API 在 page load 之后才运行 — 对 FSA 探测 bundle 来说太晚了。mouseMoved 的 move-then-click)。chrome.scripting 程序化 click 过不了这些门;CDP Input.dispatchMouseEvent 可以,因为浏览器把它当成真正的输入事件。使用范围。Wisp 只接管它自己用 chrome.tabs.create({url: 'about:blank'}) 打开的 tab,从不接管用户活动 tab。每个 cleanup 路径都会 detach。debugger 权限只在桌面端有明确用户动作时才使用 — Wisp 从不在没有桌面端请求的情况下自行 attach。
tabs为什么需要。chrome.tabs.create 打开自动化 tab;chrome.tabs.remove 在用户不需要保留草稿 tab 的清理路径上关闭它。
使用范围。Wisp 只创建和删除自己创建的 tab,不枚举、查询、修改其他 tab。
alarms为什么需要。MV3 service worker 空闲约 30 秒后会被挂起,从而断开与桌面端的 Native Messaging 连接。Wisp 注册一个 30 秒的 chrome.alarms 保活:每次触发都重新唤醒 worker 并重置空闲计时。setInterval 在 worker 回收后无法存活;alarms 会持久并重新唤醒它。
使用范围。该 alarm 只触发保活心跳,不做任何 DOM 操作,也不发起任何上传或读取 —— 那些始终需要桌面端的显式请求。
contextMenus为什么需要。添加一个“保存到 Nephele”右键菜单项(对图片、链接、选中文本或整页),以及一个可选的键盘快捷键,让你一步把参考剪藏进素材库。点击后把选中项发给桌面端,由桌面端抓取全分辨率原图并保存;菜单本身不做其他任何事。
<all_urls>为什么需要广泛访问。Wisp 在你自己的登录会话中、对你正在使用的任意网站工作 —— 发布、读取、收集/剪藏参考。参考图的字节往往在独立的 CDN 域(i.pximg.net、i.pinimg.com、pbs.twimg.com 等),和站点主域不同,所以即便枚举站点列表也会静默拉不到真正的图;固定白名单会在你访问的下一个站点/CDN 上失效。同类参考/剪藏工具(如 Eagle)正是出于同样原因请求 <all_urls>。
为什么这样是安全的 —— 约束在于行为,不在于范围。广泛访问被一组可在开源仓库中核验的硬性行为边界约束(见下方“Wisp 永不做的事”):
chrome.debugger 会显示 Chrome 持久的“Nephele Wisp 开始调试此浏览器”提示条;Wisp 只接管它自己打开的 tab。本机 asset / ingest 通道跑在 127.0.0.1(一次性 token、5 分钟过期、只绑定 loopback),由 <all_urls> 覆盖。
根据 Chrome Web Store program policy,本扩展有单一目的:
作为 Nephele Workshop 桌面应用的浏览器侧半边:执行它发来的请求 —— 填上传表单(停在“草稿已填好”由用户检查)、读取用户自己的创作者数据、读取页面、收集或剪藏参考图 —— 全部在用户自己的登录会话中进行,并把结果交回桌面端。扩展自身不主动做任何事;每个动作都源于桌面端的请求,或你主动触发的一次剪藏。
这些是协议层强制的非目标:
ACTION_REQUIRED 错码 bail,留 tab 给用户处理。