跳到主要内容

前端通信 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_messagemessage_type 或文档中的事件名一致。
  • 第二个参数:回调,参数是解析后的数据(常见为对象)。
  • 返回值取消订阅函数,调用后不再接收该监听。

消息体积与性能

  • 单次传递的数据不要过大;WebView2 上建议控制在约 252MB 以内,再大容易崩或卡死。
  • 只订阅需要的事件,用完记得 off(),避免泄漏与重复处理。

示例

const result = await jade.invoke('message', { data: 'test' }, { timeout: 5000 });

宿主侧为每个 命令名register_ipc_handler,见 IPC 通信 API