Unterstützung mehrerer Profile unter einem einzelnen Benutzerdatenordner
Artikel
Mit der WebView2-API für mehrere Profile können Sie Benutzerprofile erstellen und bearbeiten, um mit Ihren WebView2-Steuerelementen zu arbeiten. Profile in WebView2 ähneln den Profilen in Microsoft Edge. Die Unterstützung mehrerer Profile ermöglicht es einer WebView2-App, mehrere Profile unter einem einzelnen Benutzerdatenordner zu haben.
Jedes Profil verfügt über einen dedizierten Profilordner zum Speichern von Browserdaten, der einen separaten Browserdatenspeicher für jeden Benutzer bereitstellt, z. B. Cookies, Benutzereinstellungen und zwischengespeicherte Ressourcen. Alle WebView2-Steuerelemente, die demselben Benutzerprofil zugeordnet sind, verwenden einen einzelnen Profilordner.
Vorheriger Ansatz: Verwenden eines anderen Benutzerdatenordners für jedes WebView2-Steuerelement
Bisher konnte eine WebView2-App ohne Unterstützung mehrerer Profile unterschiedliche Benutzerdatenordner für verschiedene WebView2-Steuerelemente verwenden, um die Datentrennung zu erreichen. Bei diesem Ansatz müssen Sie jedoch mehrere WebView2-Runtimeinstanzen ausführen (jede umfasst einen Browserprozess und eine Reihe von untergeordneten Prozessen), die mehr Systemressourcen verbraucht haben, einschließlich Arbeitsspeicher, CPU-Speicherbedarf und Speicherplatz.
Angeben des Profils beim Erstellen einer WebView2
Erstellen eines Optionsobjekts, das ein Profil definiert
Die CreateCoreWebView2ControllerOptions -Methode für CoreWebView2Environment erstellt ein Optionsobjekt, CoreWebView2ControllerOptions, um bestimmte Informationen zu einem Profil bereitzustellen, einschließlich ProfileName und IsInPrivateModeEnabled. Verwenden Sie dieses Objekt, um das Zielprofil beim Erstellen einer WebView2-Steuerelementinstanz anzugeben.
Erstellen eines WebView2-Steuerelements, das das Profil verwendet
Jede Create...Controller Methode, die einen options Parameter akzeptiert, erstellt ein WebView2-Steuerelement und ordnet es dem von Ihnen angegebenen Profil zu. Wenn das angegebene Profil nicht vorhanden ist, wird ein neues Profil erstellt.
Nachdem Sie das Profilobjekt abgerufen haben, können Sie es bearbeiten. Verwenden Sie CoreWebView2Profile , um Profilinformationen abzurufen und profilweite Einstellungen und Vorgänge auszuführen.
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);
}
// ...
}
Siehe auch
Mehrere Profile in Übersicht über WebView2-Features und -APIs.