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