Windows WebView2 and Rust
在 WebView2 出来之前,如果想要基于 webivew 技术开发桌面应用,在 Mac OSX 上面可以用 webkit, 在 Linux 上面可以用 GTK 版的 webkitgtk, 但是在 Windows 上面只能用 MSHTML, 这个 MSHTML 使用起来各种不兼容。
现在,随着 m$ 的 edge 浏览器拥抱 Chromium 内核,WebView2
的出现,使得情况得到很大的改善。
这里的 WebView2
是专门指的 微软的 WebView2
微软貌似比较喜欢 Rust, 还专门给 Rust 做了 windows 绑定:
https://docs.microsoft.com/en-us/windows/dev-environment/rust/rust-for-windows
https://crates.io/crates/windows
https://github.com/microsoft/windows-rs/
官方 crate 里面是有一个叫 WebView
的控件的,不过好像没有看到 example
当前 WebView2 支持的系统包括:
- Windows 10
- Windows 8.1
- Windows 7
- Windows Server 2019
- Windows Server 2016
- WindowsServer 2012
- Windows Server 2012 R2
- WindowsServer 2008 R2
连 Windows 7 都支持了,所以,其实系统方面不用担心了。这年头谁还用 XP ?
Distribution of apps using WebView2
基于 WebView2 的应用如何分发?
因为目前 WebView2 的运行时是需要单独安装的。
什么是 WebView2 运行时
WebView2 运行时是一个可再发行运行时,并用作 WebView2 应用的支持 Web 平台。 此概念类似于 Visual C++/.NET 应用的 .NET 运行时。 运行时包含经过修改Microsoft Edge (Chromium) 已针对应用进行优化和测试的二进制文件。 运行时在安装时不会显示为用户可见的浏览器。
在生产环境中,在应用启动之前,必须确保运行时存在于用户设备上。 Microsoft Edge Stable 渠道不可用于 WebView2。 该决定可防止应用在生产中依赖浏览器。
为什么 WebView2 运行时 需要独立安装,微软也给出了详细的解释:
Microsoft Edge (Chromium) 不一定存在于所有用户设备上。 例如,与 Windows Update 断开连接或不由 Microsoft 直接管理的设备 (大部分 Enterprise 和 EDU 市场) 可能没有浏览器。 允许分发 WebView2 运行时可以避免依赖浏览器作为应用的先决条件。 浏览器和应用具有不同的用例,因此依赖浏览器可能会对应用产生意外的负面影响。 例如,IT 管理员可以对浏览器进行版本控制,以确保内部网站兼容性。 WebView2 运行时允许应用在主动管理浏览器更新时保持常青。 与浏览器相反,运行时针对应用方案进行开发和测试,并且在某些情况下可能包括浏览器中尚未提供的 Bug 修复。
这也就是为什么 WebView2 的运行时是需要单独安装。微软特意为之的, 将 WebView2 运行时与 Microsoft Edge 浏览器分开,还有另一个好处是,并不是所有人都愿意使用 Edge 浏览器,你总不能期望别人为了使用一个基于 WebView2 的 app 要安装整个 Edge 浏览器 吧?所以,老灯也觉得 ,WebView2 运行时独立安装, 虽然对于软件分布来说会增加一些困难,但是其实是优点多于缺点的。
分发模式
- 常青分发模式
- 固定版本分发模式
这两种方式各有好处和坏处吧,主要看具体需求。
常青分发模式
常青分发需要你的应用保持和较新版本的运行时兼容。
其中,常青分发模式部署的又分为:
- 联机部署
- 脱机部署
注: 无论哪种部署,必要的操作包含:在应用安装程序或更新程序中包括运行时安装程序(Evergreen Bootstrapper 或 Evergreen Standalone Installer)
所谓“联机部署” 就是 app 在运行的时候,检测运行时是否已经安装,如果没有安装,则运行一个 2M 左右的运行时下载器(Evergreen Bootstrapper)
# 静默安装 Evergreen Bootstrapper
MicrosoftEdgeWebview2Setup.exe /silent /install
该方式具有以下优点:
- 仅在需要或不需要打包安装程序时安装运行时。
- 引导程序自动检测设备体系结构并安装匹配的运行时。
- 以静默方式安装运行时。
- 还可以选择将引导程序打包到你的应用中,而不是以编程方式按需下载它。
所谓“脱机部署” 就是 app 在运行的时候,检测运行时是否已经安装,如果没有安装,则执行独立安装程序
MicrosoftEdgeWebView2RuntimeInstaller{X64/X86/ARM64}.exe /silent /install
部署 Evergreen WebView2 运行时
设备上的所有 Evergreen 应用只需安装一次 Evergreen WebView2 运行时。 WebView2 运行时下载页上提供了 许多工具。 以下工具可帮助你部署常青运行时。
- WebView2 运行时引导程序是一个小的 (大约 2 MB) 安装程序。 WebView2 运行时引导程序从与用户设备体系结构匹配的 Microsoft 服务器下载并安装 Evergreen Runtime。
- 使用链接以编程方式下载引导程序。
- WebView2 运行时独立安装程序是在脱机环境中安装 Evergreen WebView2 运行时的完整安装程序。 目前,引导程序和独立安装程序仅支持每台计算机安装,这需要提升。 如果安装程序在未提升权限的情况下运行,系统将提示用户提升权限。
固定版本分发模式
固定版本分发模式以前称为自带发布。这种分发方式,其实就是你下载好了一个特定版本的运行时,解压出来,直接打包集成到你的应用程序里面。
对于具有严格兼容性要求的限制环境,请考虑使用固定版本分发模式。 使用固定版本分发模式选择并打包特定版本的 WebView2 运行时。 你可以为你的应用指定运行时更新的时间。 固定版本分发模式不会接收任何自动更新。 计划更新你的应用和运行时。
若要使用固定版本模式,请完成以下操作
下载 固定版本程序包。
使用命令行或 WinRAR 等
expand {path to the package} -F:* {path to the destination folder}
工具解压缩包。 避免通过文件资源管理器解压缩,因为它可能无法生成正确的文件夹结构。在项目中包括解压缩的固定版本二进制文件。
指示创建 WebView2 环境时固定版本二进制文件的路径。
对于 Win32 C/C++,可以使用 CreateCoreWebView2EnvironmentWithOptions 函数创建环境。 使用
browserExecutableFolder
参数指示包含 的文件夹的路径msedgewebview2.exe
。对于 .NET,您可以执行以下任一选项来指定环境。
备注
必须指定环境,WebView2
Source
属性才能生效。
将固定版本二进制文件打包并随你的应用一起提供。 根据情况更新二进制文件。
看了下, ms 的 rust crate 里面并没有包含 CreateCoreWebView2EnvironmentWithOptions
相关的东西,github 上面有一个Rust 绑定 https://github.com/sopium/webview2
有提供这个方法:https://docs.rs/webview2/0.1.0/webview2/struct.EnvironmentBuilder.html
A builder for calling the CreateCoreWebView2EnvironmentWithOptions
function.
Use Environment::builder()
to create one.
Refs
使用 WebView2 分发应用: https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution
运行时下载: https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/
WebView2 介绍: https://developer.microsoft.com/en-us/microsoft-edge/webview2/
管理用户数据文件夹 https://docs.microsoft.com/zh-cn/microsoft-edge/webview2/concepts/user-data-folder
开发安全 WebView2 应用的最佳方案 https://docs.microsoft.com/zh-cn/microsoft-edge/webview2/concepts/security
了解 WebView2 SDK 版本 https://docs.microsoft.com/zh-cn/microsoft-edge/webview2/concepts/versioning
如何调试 WebView2 应用 https://docs.microsoft.com/zh-cn/microsoft-edge/webview2/how-to/debug?tabs=devtools