WebKit - 自定义页面与菜单
WebKit 模块允许插件在 EasyBot 的 Web 管理界面中注册自定义页面和菜单项。通过此 API,插件可以在侧边栏中添加菜单, 并响应前端页面的交互请求。
版本要求
WebKit API 在 SDK v0.3.2 中引入。需要 EasyBot 2.1.0-dev.6 或更高版本。
核心概念
菜单系统架构
EasyBot 的菜单系统采用树形结构:
- 分组 (Group):纯目录节点,用于收纳子菜单
- 页面 (Page):叶子节点,关联一个前端页面路径
- 插件菜单:由插件通过
pluginMenu注册,自动关联到当前插件
ID 自动拼接
注册菜单时填写的 id 会自动加上当前插件 ID 前缀,格式为 插件ID:注册ID。例如:
- 插件 ID:
my_plugin - 注册时填写 ID:
my_page - 最终完整 ID:
my_plugin:my_page
前后端通信机制
自定义页面的核心交互模式是:前端通过 window.webuikit.action() 调用后端方法,后端通过 onAction 回调处理请求并返回结果。
数据流概览
前端 API:window.webuikit.action()
在前端页面的 JavaScript 中,通过全局对象 window.webuikit 提供的 action() 方法与后端插件通信。
语法:
const result = await window.webuikit.action(method, params);
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
method | string | 方法名,用于在后端 onAction 中区分不同的操作 |
params | any | 传递给后端的参数,可以是任意 JSON 可序列化的数据 |
返回值:Promise<any> — 后端 onAction 回调的返回值,自动通过 JSON 序列化传回前端。
关键点:
action()是一个异步函数,返回Promise,必须在async函数中使用await或.then()获取结果。- 无需手动传递
sessionId——WebUI 会自动注入当前会话标识,后端会收到包含sessionId的WebAction对象。 - 后端返回的 JavaScript 对象会被自动序列化为 JSON 传回前端,前端直接拿 到已反序列化的对象。
后端处理:onAction 回调
在 pluginMenu.register() 中注册的 onAction 回调函数,是后端处理前端请求的入口。
回调签名:
(action: WebAction) => any | Promise<any>
WebAction 对象结构:
| 属性 | 类型 |
|---|