建议采用以下最佳做法来开发生产 WebView2 应用。
使用常青 WebView2 运行时
建议对大多数 WebView2 应用使用常青 WebView2 运行时,而不是使用固定版本运行时。
Evergreen 运行时在客户端上自动更新,以便 WebView2 应用可以使用最新功能和安全修补程序。 与固定版本运行时相比,Evergreen 运行时在磁盘上所需的存储空间也更少。 已修复版本运行时分发只建议用于具有严格兼容性要求的应用。
请参阅 WebView2 运行时的常青与固定版本。
若要帮助确保 WebView2 应用与 Evergreen WebView2 运行时正常工作,请使用以下小节中的建议做法:
检查以确保已安装 WebView2 运行时
使用 Evergreen WebView2 运行时时,在应用使用 WebView2 控件之前,请以编程方式检查以确保客户端上已安装 Evergreen WebView2 运行时。
请参阅分发应用和 WebView2 运行时中的检测是否已安装 WebView2 运行时。
处理 WebView2 运行时的更新
使用 Evergreen WebView2 运行时时,处理 Evergreen WebView2 运行时更新。 常青 WebView2 运行时的汇报会自动下载,但正在运行的 WebView2 应用将继续使用其当前版本的 WebView2 运行时,可能缺少安全更新。 若要采用新版本,应用必须释放对以前的 WebView2 对象的所有引用或重启。 实现事件处理程序可 NewBrowserVersionAvailable 提示用户重新启动应用以进行更新,并建议在退出之前保存用户状态以实现无缝过渡。
请参阅分发应用和 WebView2 运行时中的“处理常青 WebView2 运行时”更新。
使用 Edge 预览频道进行前向兼容性测试
使用 Evergreen WebView2 运行时时,请使用 Microsoft Edge (Beta、Dev 或 Canary) 的预览渠道运行向前兼容性测试。
由于常青运行时会自动更新,因此应定期运行兼容性测试,以确保 WebView2 应用在新的运行时版本上继续按预期工作。 为此,可以在 WebView2 控件中针对 Microsoft Edge 预览频道测试 Web 内容。
通过部署预览频道,按照使用 Microsoft Edge 和自托管的预览频道进行预发布测试中的指南进行操作。
将功能检测用于较新的 API
使用常青 WebView2 运行时时,请使用功能检测来测试已安装的运行时是否支持最近添加的 API。 若要运行使用特定版本的 Webview2 SDK 开发的 WebView2 应用,客户端必须安装兼容版本的 WebView2 运行时。
使用 Evergreen WebView2 运行时时,在某些情况下,客户端上的运行时未自动更新到最新版本。 此外,某些组策略会暂停运行时的更新。 因此,当你将更新推送到 WebView2 应用时,如果尝试调用客户端已安装运行时中不可用的较新 API,则该应用可能无法运行。 因此,应使用功能检测来确保客户端上安装的 WebView2 运行时支持 WebView2 应用使用的较新 API。
请参阅 “功能检测”,以测试已安装的运行时是否支持WebView2 的预发布和发布 SDK 中最近添加的 API。
如果使用固定版本运行时,请定期更新
如果使用固定版本的 WebView2 运行时,请确保定期更新与应用一起打包的 WebView2 运行时,以降低安全风险。 要确定应多久更新一次固定版本运行时,应考虑应用的威胁模型。 例如,在 Webview2 应用中使用第三方内容时,请始终将内容视为不受信任的内容。
请参阅:
- WebView2 运行时的常青版本与固定版本
- “分发应用”中的固定版本运行时分发模式和 WebView2 运行时。
管理用户数据文件夹的生命周期
WebView2 应用创建用户数据文件夹以存储 Cookie、凭据和权限等数据。 创建用户数据文件夹后,应用负责管理用户数据文件夹的生存期。 例如,卸载应用时,应用必须进行清理。
请参阅:
处理运行时进程故障或退出
与应用进程一起运行的运行时进程集合支持 WebView2 应用。 这些支持运行时进程可能会因各种原因而失败,例如内存不足或被用户终止。 WebView2 应用应处理这些与进程相关的事件,以确保应用可以从故障中恢复并继续平稳运行。
环境对象上的事件处理程序
如果对象上 CoreWebView2Environment 的任何应用事件处理程序都包含对环境对象的引用,并且应用只是释放对环境和事件处理程序的引用而不删除事件处理程序,则环境对象和处理程序对象之间可能存在循环引用,这将泄漏内存。
防止此类内存泄漏:
对于任何添加的事件处理程序,请在释放环境对象之前删除事件处理程序。
避免在事件处理程序中保留对环境对象的引用。 相反,事件处理程序可以从“event completed”回调的参数访问
sender环境对象。如果希望应用保留对 WebView2 对象的引用,请尽可能使用弱引用。
遵循安全最佳做法
WebView2 使你能够在本机应用程序中托管 Web 内容,其优势如使用基于 Web 的 UI、访问 Web 平台的功能以及跨平台共享代码。
然而,托管 Web 内容也可能引入漏洞。 若要避免在本机应用程序内托管 Web 内容可能导致的漏洞,请确保将 WebView2 应用程序设计为密切监视 Web 内容与主机应用程序之间的交互。
按照 开发安全的 WebView2 应用中的指南进行操作。
另请参阅
- 在 WebView2 中处理与进程相关的事件
- 功能检测,以测试已安装的运行时是否支持WebView2 的预发布和发布 SDK 中最近添加的 API。
- WebView2 运行时的常青版本与固定版本
-
分发应用和 WebView2 运行时
- 检测 WebView2 运行时是否已安装 在 分发 应用和 WebView2 运行时。
- “分发应用”中的固定版本运行时分发模式和 WebView2 运行时。
- 在“分发应用和 WebView2 运行时”中处理常青 WebView2 运行时更新。
- 开发安全的 WebView2 应用
- 使用 Microsoft Edge 预览频道进行预发布测试
- 通过部署预览频道自托管
- 管理用户数据文件夹
WebView2 参考:
Microsoft Edge 企业版文档: