Suporte a vários perfis em uma única pasta de dados de usuário
Artigo
A API de Vários Perfis do WebView2 permite que você crie e manipule perfis de usuário para trabalhar com seus controles WebView2. Os perfis no WebView2 são conceitualmente semelhantes aos perfis no Microsoft Edge. O suporte a vários perfis permite que um aplicativo WebView2 tenha vários perfis em uma única pasta de dados do usuário.
Cada perfil tem uma pasta de perfil dedicada para salvar dados do navegador, que fornece armazenamento de dados de navegação separado para cada usuário, como cookies, configurações de preferência do usuário e recursos armazenados em cache. Todos os controles WebView2 associados ao mesmo perfil de usuário compartilham uma única pasta de perfil.
Abordagem anterior: usando uma pasta de dados de usuário diferente para cada controle WebView2
Anteriormente, sem suporte para vários perfis, para obter a separação de dados, um aplicativo WebView2 poderia usar pastas de dados de usuário diferentes para diferentes controles WebView2. No entanto, nessa abordagem, você deve executar várias instâncias de runtime do WebView2 (cada uma incluindo um processo de navegador e vários processos filho), que consumiram mais recursos do sistema, incluindo memória, pegada de CPU e espaço em disco.
Especifique o perfil ao criar um WebView2
Criar um objeto de opções que define um perfil
O CreateCoreWebView2ControllerOptions método em CoreWebView2Environment cria um objeto de opções, CoreWebView2ControllerOptions, para fornecer informações específicas sobre um perfil, incluindo ProfileName e IsInPrivateModeEnabled. Use esse objeto para especificar o perfil de destino ao criar uma instância de controle Do WebView2.
Cada Create...Controller método que usa um options parâmetro cria um controle WebView2 e o associa ao perfil especificado. Se o perfil especificado não existir, um novo perfil será criado.
Depois de obter o objeto de perfil, você pode manipulá-lo. Use CoreWebView2Profile para obter informações de perfil e fazer operações e configurações em todo o 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);
}
// ...
}
Confira também
Vários perfis em Visão geral de recursos e APIs do WebView2.