Control de eventos relacionados con procesos en WebView2
WebView2 usa varios procesos para admitir los controles WebView2 de la aplicación. Dado que estos procesos pueden salir durante el uso, WebView2 proporciona los eventos y CoreWebView2Environment.BrowserProcessExited
para que la CoreWebView2.ProcessFailed
aplicación reaccione a diferentes escenarios. Use este documento para aprender a usar estos eventos para reaccionar cuando se produzcan estos escenarios.
Para mejorar la confiabilidad de la aplicación WebView2, se recomienda que la aplicación controle al menos los eventos siguientes:
- El proceso del explorador principal se ha salido inesperadamente.
- Un contenido de representación de procesos en el control WebView2 se ha salido inesperadamente.
- Un proceso de representador deja de responder.
Para usar este artículo, se recomienda leer primero El modelo de proceso para aplicaciones WebView2. Para obtener una lista de las API relacionadas con procesos que se tratan en este artículo, consulte Administración de procesos en Información general sobre las características y las API de WebView2.
Eventos para procesos que se han salido o han producido errores
Al inicializar un control WebView2, WebView2 se asegurará de que haya un entorno de ejecución de WebView2 para alimentar el control y conectarse a su grupo de procesos de WebView2. Una vez establecida esta conexión, el control comenzará a supervisar estos procesos e informará de los siguientes eventos para que la aplicación pueda reaccionar en consecuencia:
Cualquier error de proceso. Cuando se produce un error en cualquiera de los procesos del entorno de ejecución de WebView2, CoreWebView2 generará el
ProcessFailed
evento. Esto puede deberse a un bloqueo del proceso o a un proceso de representador que no responde. Use este evento para diagnósticos y recuperación de errores en los procesos de WebView2. Consulte Control de bloqueos de proceso y A process rendering content in the WebView2 control has exited unexpectedly, below.Se cierra el proceso del explorador principal. Si el proceso del explorador principal se cierra por cualquier motivo,
CoreWebView2Environment
provocará elBrowserProcessExited
evento. Use este evento para sincronizar las operaciones que implican los recursos en tiempo de ejecución de WebView2 y la duración, como la administración y las actualizaciones de carpetas de datos de usuario . Consulte Control del proceso principal del explorador que se ha salido, a continuación.El proceso del explorador principal se bloquea. Cuando se bloquea el proceso del explorador principal, generará un
ProcessFailed
evento y unBrowserProcessExited
evento, ya que el proceso del explorador principal se cerró debido a un error.
Recopilación de detalles de errores de proceso
El ProcessFailed
evento proporciona información detallada sobre el error de proceso que se notifica. La aplicación puede usar y recopilar información de los argumentos de eventos con fines de supervisión y diagnóstico, incluida la descripción del proceso (solo para procesos de utilidad) y la información de marcos (solo para procesos de representador).
Algunos errores de proceso pueden provocar el ProcessFailed
evento en distintos controles WebView2 de la aplicación. Debe decidir con qué frecuencia debe recopilar detalles y cómo controlar los duplicados para estos casos.
Además, la mayoría de los bloqueos de proceso generarán volcados en la carpeta de datos del usuario, en el directorio devuelto por FailureReportFolderPath
. Puede usar estos volcados de memoria para comprender los bloqueos y proporcionar información adicional al ponerse en contacto con el equipo de WebView2.
Controlar bloqueos del proceso
Cuando se produce un bloqueo en el entorno de ejecución de WebView2, se generará el ProcessFailed
evento para cada control WebView2 asociado al proceso de bloqueo. El error puede o no ser recuperable y algunos errores se pueden recuperar automáticamente.
Puede usar las siguientes propiedades de los argumentos de evento para identificar el error:
ProcessFailedKind
. Combinación del propósito del proceso (como explorador, representador o GPU) y error (salida, falta de respuesta). Los procesos del representador se dividen aún más en el representador de fotogramas principales (RenderProcessExited
,RenderProcessUnresponsive
) y el representador de subtramas (FrameRenderProcessExited
).ProcessFailedReason
. Indica la categoría del problema que provoca el error. Algunas de estas razones de error solo se aplican a tipos de error específicos.
El proceso del explorador principal se ha salido inesperadamente
Todos los controles WebView2 de la aplicación que usan la misma configuración de entorno recibirán el ProcessFailed
evento con:
-
Tipo de error:
BrowserProcessExited
. -
Motivo del error: cualquiera, excepto
Unresponsive
yLaunchFailed
.
Todos los controles WebView2 asociados se cerrarán y la aplicación debe controlar la recuperación de este error. Los controles WebView2 deben volver a crearse.
También se generará un único BrowserProcessExited
evento desde CoreWebview2Environment
, pero no se garantiza el orden de estos eventos. La aplicación debe coordinar sus controladores de eventos para estos dos eventos cuando se bloquea el proceso del explorador. Consulte Control del proceso principal del explorador que se ha salido, a continuación.
Un contenido de representación de procesos en el control WebView2 se ha salido inesperadamente
El contenido de los marcos afectados (principal o subtrama) se reemplaza por una página de error. Cada control WebView2 en el que se vea afectado el contenido recibirá el ProcessFailed
evento con:
-
Tipo de error:
RenderProcessExited
oFrameRenderProcessExited
. -
Motivo del error: cualquiera, excepto
Unresponsive
yProfileDeleted
.
La aplicación debe controlar la recuperación de este error. Si el marco principal se ve afectado (RenderProcessExited
), puede usar la Reload
API para volver a cargar contenido en los controles. Como alternativa, puede Close
volver a crear los controles WebView2.
Si el marco principal no se ve afectado (FrameRenderProcessExited
), la aplicación puede comunicarse con el marco principal para recuperar el contenido de los fotogramas afectados. El ProcessFailed
evento proporciona detalles de los marcos afectados a través de la FrameInfosForFailedProcess
propiedad .
El proceso de GPU se ha salido inesperadamente
El contenido de los controles WebView2 puede parpadear a medida que el proceso se vuelve a crear automáticamente. Cada control WebView2 del grupo de procesos de WebView2 recibirá el ProcessFailed
evento con:
-
Tipo de error:
GpuProcessExited
. -
Motivo del error: cualquiera, excepto
Unresponsive
yProfileDeleted
.
Este es el error de proceso de WebView2 más común y se puede recuperar automáticamente. La aplicación no necesita controlar la recuperación para este evento, pero puede recopilar información para comprender los problemas persistentes o si hay una causa subyacente para las salidas repetidas del proceso de GPU.
Un proceso de utilidad se ha salido inesperadamente
Puede haber algunas interrupciones (por ejemplo, si el proceso de utilidad hospedaba el servicio de audio) los procesos necesarios se vuelven a crear automáticamente. Cada control WebView2 del grupo de procesos de WebView2 recibirá el ProcessFailed
evento con:
-
Tipo de error:
UtilityProcessExited
. -
Motivo del error: cualquiera, excepto
Unresponsive
yProfileDeleted
.
Este error del proceso no es irrecuperable y se puede recuperar automáticamente. La aplicación no necesita controlar la recuperación para este evento, pero puede recopilar información para comprender los problemas persistentes, incluido el ProcessDescription
proporcionado en los argumentos del evento.
Cualquier otro proceso se ha salido inesperadamente
La mayoría de los procesos del grupo de procesos de WebView2 están asociados a todos los controles WebView2 que lo usan y se elevarán ProcessFailed
a cada control con:
-
Tipo de error:
PpapiBrokerProcessExited
,PpapiPluginProcessExited
,RenderProcessUnresponsive
,SandboxHelperProcessExited
oUnknownProcessExited
. -
Motivo del error: cualquiera, excepto
Unresponsive
yProfileDeleted
.
Estos errores de proceso no son irrecuperables y la aplicación no necesita controlar la recuperación de ninguno de ellos, pero puede recopilar información para comprender los problemas persistentes.
Controlar representadores que no responden
Cuando el proceso del representador del marco principal de un control WebView2 deja de responder a la entrada del usuario, el ProcessFailed
evento se generará con:
-
Tipo de error:
RenderProcessUnresponsive
. -
Motivo del error:
Unresponsive
.
El evento se seguirá generando mientras el proceso no responda. La falta de respuesta del proceso del representador puede producirse por los siguientes motivos:
Se está ejecutando un script de larga duración . Por ejemplo, el contenido web del control WebView2 podría estar realizando un XHR sincrónico o haber entrado en un bucle infinito. Volver a cargar el control WebView2 (llamando a
Reload
) podría hacer que el control responda de nuevo.El sistema está ocupado.
Este evento se generará repetidamente (por ejemplo, cada 15 segundos), por lo que debe decidir el umbral para que la aplicación actúe sobre él.
Controlar el proceso del explorador principal que se ha salido
El BrowserProcessExited
evento indica que el proceso del explorador principal ha salido y que se han liberado sus recursos (incluidos sus procesos secundarios). Esto puede ocurrir por los siguientes motivos:
Se han cerrado todos los controles WebView2 de
CoreWebView2Environment
. Entre los escenarios de aplicación de ejemplo se incluyen:- Borrar la carpeta de datos del usuario.
- Actualizar el entorno de ejecución de WebView2.
- Reiniciar con una configuración de entorno diferente.
- Borrar la memoria caché de autenticación.
Error en el proceso del explorador principal. Consulte El proceso del explorador principal se ha salido inesperadamente, anteriormente.
Este evento está pensado para operaciones que implican los recursos en tiempo de ejecución de WebView2. La aplicación puede usar el tipo de salida y el identificador de proceso de los argumentos de evento para determinar cuándo y cómo controlar el evento. Por ejemplo, es posible que quiera coordinar con ProcessFailed
los controladores de eventos para evitar las condiciones de carrera que podrían surgir al intentar la recuperación al intentar quitar la carpeta de datos del usuario.
Borrar la carpeta de datos del usuario
La aplicación debe esperar hasta que el entorno de ejecución de WebView2 haya publicado la carpeta de datos de usuario para poder eliminar su contenido. Después de cerrar todos los controles WebView2, el BrowserProcessExited
evento indica que esto ha ocurrido y que la aplicación puede continuar con la operación.
Vea también:
Actualización del entorno de ejecución de WebView2
Para poder usar la versión más reciente de WebView2 Runtime después de una actualización, la aplicación debe cerrar todos los controles WebView2 y crear un nuevo CoreWebView2Environment
. Para asegurarse de que se usa la nueva versión, la aplicación debe esperar el BrowserProcessExited
evento; de lo contrario, el proceso del explorador principal podría permanecer activo cuando se cree el nuevo entorno y se producirá un error al cambiar a la nueva versión.
Reinicio con una configuración de entorno diferente
La mayor parte de la configuración usada para un CoreWebView2Environment
objeto está enlazada a la duración del proceso del explorador principal. Para realizar cambios en esta configuración (por ejemplo, en el lenguaje), la aplicación debe cerrar los controles WebView2 existentes y esperar BrowserProcessExited
antes de volver a crearlos; de lo contrario, la inicialización de los controles WebView2 desde el nuevo CoreWebView2Environment podría producir un error de configuración incompatible.
Borrar la memoria caché de autenticación
La caché de autenticación almacena la selección de certificados y las credenciales de las solicitudes de certificado de cliente HTTPS.
La caché de autenticación está enlazada a la duración del proceso del explorador principal. Por lo tanto, para borrar la memoria caché de autenticación, la aplicación debe volver a crear sus controles WebView2 a partir de una nueva instancia de proceso del explorador principal.
Para asegurarse de que se usa una nueva instancia de proceso del explorador principal al volver a crear los controles WebView2, la aplicación debe esperar el BrowserProcessExited
evento antes de continuar; de lo contrario, el proceso del explorador principal podría permanecer activo cuando se vuelvan a crear los controles, lo que conservaría la memoria caché de autenticación en lugar de borrarla según lo previsto.
Vea también
- Modelo de proceso para aplicaciones WebView2
- Administración de procesos en Información general sobre las características y las API de WebView2.
- Referencia de api de WebView2