介绍
webview 是一个 Windows 桌面 WebView2 C++/JS 框架,提供类 Electron 的三层架构(App / Window / Bridge),但产物是单个原生 exe——前端工程与资源在构建期嵌入可执行文件,WebView2Loader 静态链入,无需部署任何 dll。
技术栈:C++17 + cmkr + WebView2 COM + WIL + nlohmann_json。仅 Windows x64。
为什么造它
| 方案 | 包体 | 启动 | 内存 | 运行时依赖 | 语言 |
|---|---|---|---|---|---|
| Electron | 大(带 Chromium) | 慢 | 高 | Node 运行时 | JS/TS |
| Tauri | 小 | 快 | 低 | 系统 WebView | Rust + JS |
| webview | 小(单 exe) | 快 | 低 | WebView2 Runtime(Win10/11 自带) | C++ + JS |
webview 的定位:要 Electron 的开发体验(前端复用 + RPC 双向通信 + 多窗口),但产物是 C++ 原生单文件,体积小、启动快、零 dll 部署。
核心特性
- RPC 双向:JS↔C++ 同步/异步调用,JSON envelope,
call<T>嵌套泵等 Promise,重入死锁检测 - 多窗口管理:MRU 激活历史 / 父子树 / 分组 / 批量操作 / 网格排布 / 跨窗口广播
- 系统集成:Display / shell / dialog / Menu / Tray / 全局快捷键 / 单实例锁 / taskbar / 持久化
- 任务栏高级:进度状态 / 角标 / 缩略图裁剪 / 缩略图工具栏
- 事件总线:WindowEvent / PageEvent 全映射,去抖 Resize / Move
- 可取消关闭:
onBeforeClose返回 false 阻止关闭 - HTML 资源打包:前端工程打进 exe 单文件分发,
opts.url无感 - .7z 资源压缩:可选 LZMA2 整包压缩,砍 exe 体积
- WindowTem 模板基类:声明式 emit 白名单 + 内置窗口控制槽,省 RPC 样板
适用场景
- 内部工具 / 管理端,要小体积单文件分发
- 从 Electron / TS 桌面应用迁移到 C++ 原生壳
- 需要调用 Win32 / 驱动 / 本地 C++ 库,同时要现代前端 UI
- 嵌入 Vue / React / 静态站点作为桌面 GUI
不适用
- 跨平台需求(仅 Windows)
- 需要 Chrome 专属 API(基于系统 WebView2,非自带 Chromium)