Compatibilidad con varios perfiles en una sola carpeta de datos de usuario
Artículo
La API De varios perfiles de WebView2 permite crear y manipular perfiles de usuario para trabajar con los controles WebView2. Los perfiles de WebView2 son conceptualmente similares a los perfiles de Microsoft Edge. La compatibilidad con varios perfiles permite que una aplicación WebView2 tenga varios perfiles en una sola carpeta de datos de usuario.
Cada perfil tiene una carpeta de perfil dedicada para guardar los datos del explorador, que proporciona almacenamiento de datos de exploración independiente para cada usuario, como cookies, configuración de preferencias de usuario y recursos almacenados en caché. Todos los controles WebView2 asociados al mismo perfil de usuario comparten una única carpeta de perfil.
Enfoque anterior: Usar una carpeta de datos de usuario diferente para cada control WebView2
Anteriormente, sin compatibilidad con varios perfiles, para lograr la separación de datos, una aplicación WebView2 podía usar diferentes carpetas de datos de usuario para distintos controles WebView2. Sin embargo, en ese enfoque, debe ejecutar varias instancias en tiempo de ejecución de WebView2 (cada una de ellas, incluido un proceso de explorador y un montón de procesos secundarios), que consumieron más recursos del sistema, como memoria, superficie de CPU y espacio en disco.
Especificar el perfil al crear una instancia de WebView2
Crear un objeto de opciones que defina un perfil
El CreateCoreWebView2ControllerOptions método en CoreWebView2Environment crea un objeto de opciones, CoreWebView2ControllerOptions, para proporcionar información específica sobre un perfil, incluidos ProfileName y IsInPrivateModeEnabled. Use este objeto para especificar el perfil de destino al crear una instancia de control WebView2.
Cada Create...Controller método que toma un options parámetro crea un control WebView2 y lo asocia al perfil especificado. Si el perfil especificado no existe, se creará un nuevo perfil.
Después de obtener el objeto de perfil, puede manipularlo. Use CoreWebView2Profile para obtener información de perfil y realizar operaciones y configuraciones de todo el perfil.
string profileName = controller.CoreWebView2.Profile.ProfileName;
bool inPrivate = controller.CoreWebView2.Profile.IsInPrivateModeEnabled;
// update window title with profileName
UpdateAppTitle(profileName);
// update window icon
SetAppIcon(inPrivate);
string profileName = controller.CoreWebView2.Profile.ProfileName;
bool inPrivate = controller.CoreWebView2.Profile.IsInPrivateModeEnabled;
// update window title with profileName
UpdateAppTitle(profileName);
// update window icon
SetAppIcon(inPrivate);
// This is the callback passed to CreateCoreWebView2Controller.
// Here we can get the profile property of the WebView2 control, then manipulate it.
HRESULT AppWindow::OnCreateCoreWebView2ControllerCompleted(HRESULT result, ICoreWebView2Controller* controller)
{
// ...
m_controller = controller;
wil::com_ptr<ICoreWebView2> coreWebView2;
CHECK_FAILURE(m_controller->get_CoreWebView2(&coreWebView2));
// We should check for failure here because if this app is using a newer
// SDK version compared to the install of the Edge browser, the Edge
// browser might not have support for the latest version of the
// ICoreWebView2_N interface.
coreWebView2.query_to(&m_webView);
// Save PID of the browser process serving last WebView created from our
// CoreWebView2Environment. We know the controller was created with
// S_OK, and it hasn't been closed (we haven't called Close and no
// ProcessFailed event could have been raised yet) so the PID is
// available.
CHECK_FAILURE(m_webView->get_BrowserProcessId(&m_newestBrowserPid));
auto webView2_13 = coreWebView2.try_query<ICoreWebView2_13>();
if (webView2_13)
{
wil::com_ptr<ICoreWebView2Profile> profile;
CHECK_FAILURE(webView2_13->get_Profile(&profile));
wil::unique_cotaskmem_string profile_name;
CHECK_FAILURE(profile->get_ProfileName(&profile_name));
m_profileName = profile_name.get();
BOOL inPrivate = FALSE;
CHECK_FAILURE(profile->get_IsInPrivateModeEnabled(&inPrivate));
if (!m_webviewOption.downloadPath.empty())
{
CHECK_FAILURE(profile->put_DefaultDownloadFolderPath(
m_webviewOption.downloadPath.c_str()));
}
// update window title with m_profileName
UpdateAppTitle();
// update window icon
SetAppIcon(inPrivate);
}
// ...
}
Consulte también
Varios perfiles en Información general sobre las características y las API de WebView2.