3

Windows WebView2 and Rust

 2 years ago
source link: https://ttys3.dev/post/windows-webview2-and-rust/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Windows WebView2 and Rust

2021-06-27

:: 荒野無燈

:: Mod 2021-06-30(0ff4061)

#WebView2  #webview  #microsoft  #edge  #Rust  #bindings  #runtime 

June 30, 2021

在 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 运行时。 你可以为你的应用指定运行时更新的时间。 固定版本分发模式不会接收任何自动更新。 计划更新你的应用和运行时。

若要使用固定版本模式,请完成以下操作

  1. 下载 固定版本程序包。

  2. 使用命令行或 WinRAR 等 expand {path to the package} -F:* {path to the destination folder} 工具解压缩包。 避免通过文件资源管理器解压缩,因为它可能无法生成正确的文件夹结构。

  3. 在项目中包括解压缩的固定版本二进制文件。

  4. 指示创建 WebView2 环境时固定版本二进制文件的路径。

    • 对于 Win32 C/C++,可以使用  CreateCoreWebView2EnvironmentWithOptions 函数创建环境。 使用 browserExecutableFolder 参数指示包含 的文件夹的路径 msedgewebview2.exe 。

    • 对于 .NET,您可以执行以下任一选项来指定环境。

      必须指定环境,WebView2 Source 属性才能生效。

      • 在 CreationProperties  / WebView2 (设置 ) WPF WinForms) 属性。 使用 BrowserExecutableFolder CoreWebView2CreationProperties ( WPF /  WinForms) 类中的成员指示固定版本二进制文件的路径。
      • 使用 EnsureCoreWebView2Async ( WPF /  WinForms) 指定环境。 使用 browserExecutableFolder  CoreWebView2Environment.CreateAsync 中的 参数指示固定版本二进制文件的路径。
  5. 将固定版本二进制文件打包并随你的应用一起提供。 根据情况更新二进制文件。

看了下, 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK