前端通信 API
概述
用途:网页里通过全局对象 jade 和外面 C/C++ 写的宿主互相发消息。订阅事件用 jade.on;让宿主算点东西、拿文件路径等用 jade.invoke。页面须运行在 JadeView 提供的 WebView 环境(含 set_protocol_service_path 给出的内置地址 或等价加载方式),否则没有 jade 对象。
jade.invoke
用途:像「远程调用宿主函数」:你把命令名和数据丢过去,宿主在 register_ipc_handler 里处理,再把结果异步还给你。适合读配置、选文件、跑耗时任务等。
2.0 推荐写法:
await jade.invoke('命令名', 传给宿主的数据, { timeout: 5000 });
- 第二段可以是字符串、对象等,宿主收到的一般是 JSON 文本。
- 第三段可选:
timeout控制最多等多久;不写则用默认超时。 - 内部是两段异步:大结果或慢任务时更稳;旧版
invokeAsync已删除,请只用invoke。
jade.on
用途:监听宿主 send_ipc_message 推过来的消息,或库内约定的通知(事件名与负载格式见 事件类型)。
const off = jade.on('事件名', function (payload) {
// payload 一般为对象(库已解析 JSON)
});
// 不再需要时取消订阅:
// off();
- 第一个参数:字符串,与 C 侧
send_ipc_message的message_type或文档中的事件名一致。 - 第二个参数:回调,参数是解析后的数据(常见为对象)。
- 返回值:取消订阅函数,调用后不再接收该监听。
消息体积与性能
- 单次传递的数据不要过大;WebView2 上建议控制在约 252MB 以内,再大容易崩或卡死。
- 只订阅需要的事件,用完记得
off(),避免泄漏与重复处理。
示例
const result = await jade.invoke('message', { data: 'test' }, { timeout: 5000 });
宿主侧为每个 命令名 调 register_ipc_handler,见 IPC 通信 API。