动手
前面各部分读的是 tauri 的源码。这一部分反过来:不依赖 tauri,只用它下面的两个库,wry 0.57.1 建 webview、tao 0.37.2 建窗口和事件循环,自己把调用主线从头写一遍。页面从一个 app:// 协议里出来,JS 的 invoke 是一个 fetch,Rust 侧是一个 ipc:// 协议处理函数加一张命令表。写完之后让一个真正的 tauri 应用调同样的命令,比较两边线上收发的东西。
- 写一个迷你 IPC:核心约 135 行。
ipc://处理函数依次检查方法、Origin、命令名、允许列表,用状态码表示成败;JS 侧十几行的invoke直接用fetch的 Promise 当回调。三个隐藏窗口测试覆盖一次往返、一次被拒、一次未知命令。去掉Access-Control-Allow-Origin之后命令照样执行,页面只看到TypeError: Load failed。最后逐项对照 tauri 多出来的 invoke key、回调 id、Tauri-Response头、二进制正文、Channel、postMessage退路和 ACL 各解决什么问题。
flowchart TB page["app:// 内嵌页面"] --> inv["invoke 一个 fetch"] inv --> proto["ipc:// 协议处理"] proto --> checks["方法 Origin 命令 允许列表"] checks --> table["命令表 fn Value"] table --> resp["状态码加正文"] resp --> inv proto --> cmp["和 tauri 并排对照"]
💬 关联讨论
发起讨论加载中...