Обработка событий, связанных с процессом, в WebView2
WebView2 использует несколько процессов для поддержки элементов управления WebView2 в приложении. Так как эти процессы могут завершать работу во время использования, WebView2 предоставляет CoreWebView2.ProcessFailed
события и CoreWebView2Environment.BrowserProcessExited
для реагирования приложения на различные сценарии. Используйте этот документ, чтобы узнать, как использовать эти события для реагирования при возникновении таких сценариев.
Чтобы повысить надежность приложения WebView2, рекомендуется, чтобы приложение обрабатывалось по крайней мере следующими событиями:
- Процесс основного браузера неожиданно завершился.
- Процесс отрисовки содержимого в элементе управления WebView2 неожиданно завершился.
- Процесс отрисовщика перестает отвечать на запросы.
Чтобы использовать эту статью, рекомендуется сначала прочитать модель процесса для приложений WebView2. Список API- интерфейсов, связанных с процессом, описанных в этой статье, см. в статье Управление процессами в статье Общие сведения о функциях и API WebView2.
События для процессов, которые завершили работу или завершили сбой
При инициализации элемента управления WebView2 WebView2 обеспечит наличие среды выполнения WebView2 для включения элемента управления и подключения к его группе процессов WebView2. После установки этого подключения элемент управления начнет мониторинг этих процессов и сообщит о следующих событиях, чтобы ваше приложение ранее отреагировало соответствующим образом:
Любой сбой процесса. Если какой-либо из процессов в среде выполнения WebView2 завершается сбоем, coreWebView2 вызовет
ProcessFailed
событие. Это может быть вызвано сбоем процесса или отсутствием ответа на процесс отрисовщика. Используйте это событие для диагностики и восстановления после сбоев в процессах WebView2. См . раздел Обработка сбоев процесса и отрисовка содержимого процесса в элементе управления WebView2 неожиданно завершена ниже.Основной процесс браузера завершается. Если основной процесс браузера завершается по какой-либо причине,
CoreWebView2Environment
BrowserProcessExited
вызывает событие . Используйте это событие для синхронизации операций с ресурсами и временем существования среды выполнения WebView2, таких как управление папками данных пользователя и обновления. См . раздел Обработка основного процесса браузера завершена ниже.Происходит сбой основного процесса браузера. При сбое основного процесса браузера создается событие
ProcessFailed
иBrowserProcessExited
событие, так как основной процесс браузера завершился из-за сбоя.
Сбор сведений о сбоях процесса
Событие ProcessFailed
предоставляет подробные сведения о сбое процесса, о который сообщается. Приложение может использовать и собирать данные из активов событий для мониторинга и диагностики, включая описание процесса (только для служебных процессов) и сведения о кадрах (только для процессов отрисовщика).
Некоторые сбои процесса могут вызывать ProcessFailed
событие для различных элементов управления WebView2 в приложении. Необходимо решить, как часто собирать сведения и как обрабатывать дубликаты для этих случаев.
Кроме того, большинство сбоев процесса создают дампы в папке данных пользователя в каталоге, возвращенном FailureReportFolderPath
. Эти дампы можно использовать для анализа сбоев и предоставления дополнительных сведений при обращении к команде WebView2.
Обработка сбоев процесса
При сбое в среде выполнения WebView2 событие будет возникать для каждого элемента управления WebView2, ProcessFailed
связанного с процессом сбоя. Сбой может быть или не может быть восстановлен, а некоторые из них можно восстановить автоматически.
Чтобы определить сбой, можно использовать следующие свойства из аргументов событий:
ProcessFailedKind
. Сочетание цели процесса (например, браузера, отрисовщика или GPU) и сбоя (выход, отсутствие ответа). Процессы отрисовщика далее делятся на основной отрисовщик кадров (RenderProcessExited
,RenderProcessUnresponsive
) и отрисовщик подфреймов (FrameRenderProcessExited
).ProcessFailedReason
. Указывает категорию проблемы, вызвавшую сбой. Некоторые из этих причин сбоя применимы только к определенным типам сбоев.
Процесс основного браузера неожиданно завершился
Все элементы управления WebView2 в приложении, использующие одну и ту же конфигурацию среды, получат событие со следующими параметрами ProcessFailed
:
-
Тип сбоя:
BrowserProcessExited
. -
Причина сбоя: любая , кроме
Unresponsive
иLaunchFailed
.
Все связанные элементы управления WebView2 будут закрыты, и приложение должно обработать восстановление после этого сбоя. Элементы управления WebView2 необходимо создать заново.
BrowserProcessExited
Одно событие будет вызываться из CoreWebview2Environment
тоже, но порядок этих событий не гарантируется. Приложение должно координировать свои обработчики событий для этих двух событий при сбое процесса браузера. См . раздел Обработка основного процесса браузера завершена ниже.
Процесс отрисовки содержимого в элементе управления WebView2 неожиданно завершился
Содержимое в затронутых кадрах (главном или подкадре) заменяется страницей ошибки. Каждый элемент управления WebView2, на который влияет содержимое, будет получать событие со следующими параметрами ProcessFailed
:
-
Тип сбоя:
RenderProcessExited
илиFrameRenderProcessExited
. -
Причина сбоя: любая , кроме
Unresponsive
иProfileDeleted
.
Приложение должно обрабатывать восстановление после этого сбоя. Если на основной кадр влияет (RenderProcessExited
), можно использовать API для перезагрузки Reload
содержимого в элементах управления. Кроме того, можно воссоздать Close
элементы управления WebView2.
Если основной кадр не затронут (FrameRenderProcessExited
), приложение может взаимодействовать с основным кадром для восстановления содержимого в затронутых кадрах. Событие ProcessFailed
предоставляет сведения о затронутых кадрах через FrameInfosForFailedProcess
свойство .
Процесс GPU неожиданно завершился
Содержимое в элементах управления WebView2 может мигать при автоматическом повторном создании процесса. Каждый элемент управления WebView2 в группе процессов WebView2 будет получать событие со следующими параметрами ProcessFailed
:
-
Тип сбоя:
GpuProcessExited
. -
Причина сбоя: любая , кроме
Unresponsive
иProfileDeleted
.
Это наиболее распространенный сбой процесса WebView2, который можно восстановить автоматически. Приложению не требуется обрабатывать восстановление для этого события, но он может собирать сведения, чтобы понять, какие постоянные проблемы или есть основная причина для повторяющегося завершения процесса GPU.
Служебная программа неожиданно завершилась
Могут возникнуть некоторые прерывания (например, если в служебном процессе была размещена аудиослужба), необходимые процессы автоматически создаются заново. Каждый элемент управления WebView2 в группе процессов WebView2 будет получать событие со следующими параметрами ProcessFailed
:
-
Тип сбоя:
UtilityProcessExited
. -
Причина сбоя: любая , кроме
Unresponsive
иProfileDeleted
.
Этот сбой процесса не является неустранимым и может быть автоматически восстановлен. Приложению не требуется обрабатывать восстановление для этого события, но он может собирать сведения для понимания любых постоянных проблем, включая ProcessDescription
указанные в аргументах событий.
Любой другой процесс неожиданно завершился
Большинство процессов в группе процессов WebView2 связаны со всеми элементами управления WebView2 с его помощью и будут вызываться ProcessFailed
к каждому элементу управления с помощью:
-
Тип сбоя:
PpapiBrokerProcessExited
,PpapiPluginProcessExited
,RenderProcessUnresponsive
SandboxHelperProcessExited
, илиUnknownProcessExited
. -
Причина сбоя: любая , кроме
Unresponsive
иProfileDeleted
.
Эти сбои процесса не являются неустранимыми, и приложению не требуется обрабатывать восстановление для каких-либо из них, но он может собирать сведения, чтобы понять любые постоянные проблемы.
Обработка отрисовщиков без ответа
Когда процесс отрисовщика для основного кадра в элементе управления WebView2 перестает отвечать на входные данные пользователя, ProcessFailed
событие будет вызываться следующим образом:
-
Тип сбоя:
RenderProcessUnresponsive
. -
Причина сбоя:
Unresponsive
.
Событие будет по-прежнему вызываться до тех пор, пока процесс не отвечает. Процесс отрисовки может не отвечать на запросы по следующим причинам:
Выполняется долго выполняющийся скрипт . Например, веб-содержимое в элементе управления WebView2 может выполнять синхронный XHR или ввести бесконечный цикл. Перезагрузка элемента управления WebView2 (путем вызова
Reload
) может привести к повторной реакции элемента управления.Система занята.
Это событие будет возникать неоднократно (например, каждые 15 секунд), поэтому необходимо определить пороговое значение для приложения.
Обработка процесса главного браузера завершена
Событие BrowserProcessExited
указывает, что основной процесс браузера завершился и его ресурсы (включая его дочерние процессы) были освобождены. Это может произойти по следующим причинам:
Все элементы управления WebView2 из
CoreWebView2Environment
были закрыты. Примеры сценариев приложений:- Очистка папки данных пользователя.
- Обновление среды выполнения WebView2.
- Перезапуск с другой конфигурацией среды.
- Очистка кэша проверки подлинности.
Сбой основного процесса браузера. См. раздел Процесс основного браузера неожиданно завершился выше.
Это событие предназначено для операций с ресурсами среды выполнения WebView2. Приложение может использовать тип выхода и идентификатор процесса из активов событий, чтобы определить, когда и как обрабатывать событие. Например, может потребоваться согласовать с ProcessFailed
обработчиками событий, чтобы предотвратить возникновение условий гонки, которые могут возникнуть при попытке восстановления, а также при попытке удалить папку данных пользователя.
Очистка папки данных пользователя
Приложению необходимо подождать, пока среда выполнения WebView2 не отпустит папку пользовательских данных , прежде чем она сможет удалить ее содержимое. После закрытия всех элементов управления WebView2 событие указывает, BrowserProcessExited
что это произошло, и приложение может продолжить операцию.
См. также:
Обновление среды выполнения WebView2
Чтобы использовать последнюю версию среды выполнения WebView2 после обновления, приложению необходимо закрыть все элементы управления WebView2 и создать новый CoreWebView2Environment
. Чтобы убедиться, что используется новая версия, приложение должно дождаться BrowserProcessExited
события. В противном случае основной процесс браузера может остаться активным при создании новой среды и переход на новую версию завершится ошибкой.
Перезапуск с другой конфигурацией среды
Большая часть конфигурации, используемой для , привязана CoreWebView2Environment
к времени существования основного процесса браузера. Чтобы внести изменения в эту конфигурацию (например, в язык), приложению необходимо закрыть существующие элементы управления WebView2 и дождаться BrowserProcessExited
повторного создания элементов управления. В противном случае инициализация элементов управления WebView2 из нового CoreWebView2Environment может завершиться сбоем с несовместимой конфигурацией.
Очистка кэша проверки подлинности
В кэше проверки подлинности хранятся выбранные сертификаты и учетные данные из запросов сертификатов клиента HTTPS.
Кэш проверки подлинности привязан к основному времени существования процесса браузера. Поэтому для очистки кэша проверки подлинности приложение должно повторно создать свои элементы управления WebView2 из нового экземпляра процесса основного браузера.
Чтобы обеспечить использование нового экземпляра основного процесса браузера при повторном создании элементов управления WebView2, приложение должно дождаться BrowserProcessExited
события перед продолжением. В противном случае основной процесс браузера может остаться активным при повторном создании элементов управления, что позволит сохранить кэш проверки подлинности, а не очистить его, как предполагалось.
См. также
- Модель процесса для приложений WebView2
- Управление процессами см . в статье Обзор функций и API WebView2.
- Справочник по API WebView2