/bridge/v1 之外,其余路径由面板处理,不受网页面板白名单限制。
路径一览
所有响应统一带
Cache-Control: no-store。失败响应的结构固定:
页面侧调用与路径的对应
包内文件:/pkg/<路径>
/pkg/ 指向插件包根目录,用来把包里的文件交给页面读取,例如词典数据、样式表与图标。路径相对包根,/pkg/dict/json/s.json 对应包内的 dict/json/s.json。
.. 段、绝对路径、指向包外的符号链接,以及目录,一律拒绝。响应的内容类型按扩展名判断;扩展名认不出时按 application/octet-stream 返回。
图片:/media/<键>
putMedia 把一张图片交给面板之后,页面用 /media/<键> 取得该图片的原始字节。键由写入方指定;写入方把同一个键置空时,对应的数据被删除,路径随之失效。
该路径只进不出,没有让页面把图片交回插件的通道。
主逻辑回调:/addon/<名称>
页面调用 mn.call(名称, 数据) 时,请求以 POST 发到 /addon/<名称>,请求体为参数的 JSON 文本。该路径只在插件写了 main.js 时可用;只有页面的插件没有 main.js,调用会进入失败分支。写法见面板之外。
面板本地 AI:/ai/run-task
mn.ai(noteid, taskId, params) 走这条路径。请求体为 {noteid, taskId, params},身份取面板所属插件,不采信请求体里的身份。该路径只在面板本地,外部调用看不到。
AI 任务不可用、缺少票据、触发限流与用户拒绝等情况一律返回 HTTP 200,返回体中的 ok 为假。这类回执不是传输错误,按返回值判断即可。
尺寸与形态:/ui/*
页面加载完成之后,宿主推一次 chrome 状态,再兜底调用一次
mn.fit()。chrome 状态包括:
面板的 WebView 是透明的,背景必须写在
html 元素上;只给 body 设背景不会显示。路径与白名单的关系
网页面板白名单只决定/bridge/v1 的放行范围,写法见数据交互。面板本地路径不受白名单限制:读取包内文件、读取图片与控制面板尺寸,只看面板是否可用。面板能否建立由模板的 plugins 名单与当前是否处于场景界面决定。