在 WebView2 中处理与进程相关的事件 您所在的位置:网站首页 控件未打开怎么处理掉 在 WebView2 中处理与进程相关的事件

在 WebView2 中处理与进程相关的事件

2024-07-15 23:01| 来源: 网络整理| 查看: 265

在 WebView2 中处理与进程相关的事件 项目 07/27/2023

WebView2 使用多个进程来支持应用程序中的 WebView2 控件。 由于这些进程可以在使用过程中退出,因此 WebView2 为应用程序提供了 CoreWebView2.ProcessFailed 和 CoreWebView2Environment.BrowserProcessExited 事件,以便对不同的方案做出反应。 使用此文档了解如何使用这些事件在发生这些方案时做出反应。

若要提高 WebView2 应用程序的可靠性,建议应用至少处理以下事件:

main浏览器进程意外退出。 WebView2 控件中呈现内容的进程意外退出。 呈现器进程无响应。

若要使用本文,建议首先阅读 WebView2 应用的进程模型。 有关本文介绍的进程相关 API 的列表,请参阅 WebView2 功能和 API 概述中的进程管理。

退出或失败的进程的事件

初始化 WebView2 控件时,WebView2 将确保有一个 WebView2 运行时来为控件提供支持并连接到其 WebView2 进程组。 建立此连接后,控件将开始监视这些进程并报告以下事件,以便应用程序可以做出相应的反应:

任何进程失败。 当 WebView2 运行时中的任何 进程 失败时,CoreWebView2 将引发 事件 ProcessFailed 。 这可能是由于进程崩溃或呈现器进程无响应。 使用此事件在 WebView2 进程中诊断和从故障中恢复。 请参阅下面的 处理进程崩溃 和 WebView2 控件中的进程呈现内容意外退出。

主浏览器进程退出。 如果main浏览器进程出于任何原因退出,CoreWebView2Environment则会引发 事件BrowserProcessExited。 使用此事件可同步涉及 WebView2 运行时资源和生存期的操作,例如 用户数据文件夹 管理和更新。 请参阅下面的处理main浏览器进程退出。

主浏览器进程崩溃。 当main浏览器进程崩溃时,它将同时生成ProcessFailed事件和BrowserProcessExited事件,因为main浏览器进程因失败而退出。

.NET/C# WinRT/C# Win32/C++ CoreWebView2.ProcessFailed 事件 CoreWebView2Environment.BrowserProcessExited 事件 CoreWebView2.ProcessFailed 事件 CoreWebView2Environment.BrowserProcessExited 事件 ICoreWebView2::add_ProcessFailed 事件 ICoreWebView2::remove_ProcessFailed 事件 ICoreWebView2Environment5::add_BrowserProcessExited 事件 ICoreWebView2Environment5::remove_BrowserProcessExited 事件 收集进程失败详细信息

该 ProcessFailed 事件提供有关所报告的进程失败的详细信息。 应用程序可以使用和收集来自事件参数的信息来监视和诊断目的,包括仅) 呈现器进程的) 和帧 (信息 (实用工具进程的过程说明 (。

.NET/C# WinRT/C# Win32/C++ CoreWebView2ProcessFailedEventArgs 类 CoreWebView2ProcessFailedEventArgs 类 ICoreWebView2ProcessFailedEventArgs2 接口

某些进程失败可能会在应用程序中的不同 WebView2 控件之间引发 ProcessFailed 事件。 必须决定收集详细信息的频率以及如何处理这些情况的重复项。

此外,大多数进程崩溃都会在 用户数据文件夹中的 FailureReportFolderPath返回的目录下生成转储。 在联系 WebView2 团队时,可以使用这些转储了解崩溃并提供其他信息。

.NET/C# WinRT/C# Win32/C++ CoreWebView2Environment.FailureReportFolderPath 属性 CoreWebView2Environment.FailureReportFolderPath 属性 ICoreWebView2Environment11::get_FailureReportFolderPath 处理进程崩溃

当 WebView2 运行时发生崩溃时, ProcessFailed 将为与崩溃进程关联的每个 WebView2 控件引发事件。 故障可能是可恢复的,也可能是无法恢复的,某些故障是可自动恢复的。

可以使用事件参数中的以下属性来标识失败:

ProcessFailedKind. 进程用途 ((例如浏览器、呈现器或 GPU) )和故障 (退出、无响应) 的组合。 呈现器进程进一步分为main帧呈现器 (RenderProcessExited、 RenderProcessUnresponsive) 和子帧呈现器 (FrameRenderProcessExited) 。

ProcessFailedReason. 指示导致失败的问题类别。 其中一些 失败原因 仅适用于特定的 故障类型。

.NET/C# WinRT/C# Win32/C++ CoreWebView2ProcessFailedEventArgs.ProcessFailedKind 属性 CoreWebView2ProcessFailedEventArgs.Reason 属性 CoreWebView2ProcessFailedEventArgs.ProcessFailedKind 属性 CoreWebView2ProcessFailedEventArgs.Reason 属性 ICoreWebView2ProcessFailedEventArgs::get_ProcessFailedKind 属性 ICoreWebView2ProcessFailedEventArgs2::get_Reason 属性 main浏览器进程意外退出

使用相同环境配置的应用程序中的所有 WebView2 控件将接收事件: ProcessFailed :

故障类型:BrowserProcessExited。 失败原因:任何,但 和 LaunchFailed除外Unresponsive。

所有关联的 WebView2 控件都将关闭,并且应用程序 必须处理 此故障的恢复。 需要重新创建 WebView2 控件。

也会从 CoreWebview2Environment 引发单个BrowserProcessExited事件,但不能保证这些事件的顺序。 当浏览器进程崩溃时,应用程序必须协调这两个事件的事件处理程序。 请参阅下面的处理main浏览器进程退出。

WebView2 控件中呈现内容的进程意外退出

受影响帧 (main或子帧) 中的内容将替换为错误页。 每个影响内容的 WebView2 控件都将接收事件, ProcessFailed 其中包含:

故障类型:RenderProcessExited 或 FrameRenderProcessExited。 失败原因:任何,但 和 ProfileDeleted除外Unresponsive。

应用程序 必须处理 此故障的恢复。 如果main帧 () RenderProcessExited 受到影响,可以使用 API Reload 重新加载控件中的内容。 或者,可以 Close 重新创建 WebView2 控件。

.NET/C# WinRT/C# Win32/C++ CoreWebView2.Reload 方法 CoreWebView2Controller.Close 方法 CoreWebView2.Reload 方法 CoreWebView2Controller.Close 方法 ICoreWebView2::Reload 方法 ICoreWebView2Controller::Close 方法

如果main帧 () FrameRenderProcessExited 不受影响,则应用程序可以与main帧通信,以恢复受影响帧中的内容。 事件 ProcessFailed 通过 FrameInfosForFailedProcess 属性提供受影响帧的详细信息。

.NET/C# WinRT/C# Win32/C++ CoreWebView2ProcessFailedEventArgs.FrameInfosForFailedProcess 属性 CoreWebView2ProcessFailedEventArgs.FrameInfosForFailedProcess 属性 ICoreWebView2ProcessFailedEventArgs2::get_FrameInfosForFailedProcess 属性 GPU 进程意外退出

WebView2 控件中的内容可能会在自动重新创建进程时闪烁。 WebView2 进程组中的每个 WebView2 控件都将接收事件,ProcessFailed其中包含:

故障类型:GpuProcessExited。 失败原因:任何,但 和 ProfileDeleted除外Unresponsive。

这是最常见的 WebView2 进程故障,可自动恢复。 应用程序 不需要 处理此事件的恢复,但可以收集信息来了解任何持久性问题,或者是否有导致重复 GPU 进程退出的根本原因。

实用工具进程意外退出

例如,如果实用工具进程承载音频服务,) 自动重新创建必要的进程,则可能存在一些中断 (。 WebView2 进程组中的每个 WebView2 控件都将接收事件,ProcessFailed其中包含:

故障类型:UtilityProcessExited。 失败原因:任何,但 和 ProfileDeleted除外Unresponsive。

此过程失败不是致命的,可自动恢复。 应用程序 不需要 处理此事件的恢复,但可以收集信息来了解任何持久性问题,包括 ProcessDescription 事件参数中提供的 。

.NET/C# WinRT/C# Win32/C++ CoreWebView2ProcessFailedEventArgs.ProcessDescription 属性 CoreWebView2ProcessFailedEventArgs.ProcessDescription 属性 ICoreWebView2ProcessFailedEventArgs2::get_ProcessDescription 属性 任何其他进程意外退出

WebView2 进程组中的大多数进程都与使用它的所有 WebView2 控件相关联,并将引发ProcessFailed到每个控件,

故障类型:PpapiBrokerProcessExited、 PpapiPluginProcessExited、 RenderProcessUnresponsive、 SandboxHelperProcessExited、 或 UnknownProcessExited。 失败原因:任何,但 和 ProfileDeleted除外Unresponsive。

这些进程失败不是致命的,应用程序 不需要 处理其中任何故障的恢复,但可以收集信息来了解任何持久性问题。

处理无响应呈现器

当 WebView2 控件中main帧的呈现器进程对用户输入无响应时,将引发以下ProcessFailed事件:

故障类型:RenderProcessUnresponsive。 失败原因:Unresponsive。

只要进程保持无响应,事件就会继续引发。 呈现器进程无响应的原因如下:

有一个 长时间运行的脚本 正在执行。 例如,WebView2 控件中的 Web 内容可能正在执行同步 XHR,或者已进入无限循环。 通过调用 Reload) 重新加载 WebView2 控件 (可能会使控件再次响应。

系统正忙。

此事件将重复引发 (例如,每隔 15 秒) 引发一次,因此需要确定应用程序对其执行操作的阈值。

处理main浏览器进程退出

该BrowserProcessExited事件指示main浏览器进程已退出,其资源 (包括其子进程) 已释放。 发生这种情况的原因如下:

已关闭 来自 CoreWebView2Environment 的所有 WebView2 控件。 示例应用方案包括:

清除用户数据文件夹。 更新 WebView2 运行时。 使用其他环境配置重启。 清除身份验证缓存。

main浏览器进程失败。 请参阅上面的main浏览器进程意外退出。

此事件适用于涉及 WebView2 运行时资源的操作。 应用程序可以使用事件参数中的退出类型和进程 ID 来确定何时以及如何处理事件。 例如,你可能希望与 ProcessFailed 事件处理程序协调,以防止在尝试恢复的同时尝试删除用户数据文件夹时可能出现的争用情况。

.NET/C# WinRT/C# Win32/C++ CoreWebView2BrowserProcessExitedEventArgs 类 CoreWebView2BrowserProcessExitedEventArgs 类 ICoreWebView2BrowserProcessExitedEventArgs 接口 清除用户数据文件夹

应用程序需要等到 WebView2 运行时释放用户 数据文件夹 后才能删除其内容。 关闭所有 WebView2 控件后, BrowserProcessExited 该事件指示已发生这种情况,并且应用程序可以继续执行该操作。

另请参阅:

管理用户数据文件夹 更新 WebView2 运行时

为了在更新后使用最新的 WebView2 运行时,应用程序需要关闭所有 WebView2 控件并创建新的 CoreWebView2Environment。 为确保使用新版本,应用程序必须等待BrowserProcessExited事件;否则,创建新环境时,main浏览器进程可能会保持活动状态,切换到新版本会失败。

使用不同的环境配置重启

用于 CoreWebView2Environment 的大多数配置绑定到浏览器进程生存期main。 为了 (语言) 更改此配置,应用程序需要关闭现有 WebView2 控件并等待 BrowserProcessExited 重新创建控件;否则,从新的 CoreWebView2Environment 初始化 WebView2 控件可能会失败,但配置不兼容。

清除身份验证缓存

身份验证缓存存储来自 HTTPS 客户端证书请求的证书选择和凭据。

身份验证缓存绑定到浏览器进程生存期main。 因此,若要清除身份验证缓存,应用程序必须从新的main浏览器进程实例重新创建其 WebView2 控件。

为了确保在重新创建 WebView2 控件时使用新的main浏览器进程实例,应用程序在继续操作之前必须等待BrowserProcessExited事件;否则,在重新创建控件时,main浏览器进程可能会保持活动状态,这将保留身份验证缓存,而不是按预期清除它。

另请参阅 WebView2 应用的处理模型 WebView2 功能和 API 概述中的进程管理。 WebView2 API 参考


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有