Prise en charge de plusieurs profils dans un seul dossier de données utilisateur
Article
L’API WebView2 Multiple Profiles vous permet de créer et de manipuler des profils utilisateur pour travailler avec vos contrôles WebView2. Les profils dans WebView2 sont conceptuellement similaires aux profils dans Microsoft Edge. La prise en charge de plusieurs profils permet à une application WebView2 d’avoir plusieurs profils sous un seul dossier de données utilisateur.
Chaque profil dispose d’un dossier de profil dédié pour enregistrer les données du navigateur, qui fournit un stockage de données de navigation distinct pour chaque utilisateur, comme les cookies, les paramètres de préférence utilisateur et les ressources mises en cache. Tous les contrôles WebView2 associés au même profil utilisateur partagent un dossier de profil unique.
Approche précédente : Utilisation d’un dossier de données utilisateur différent pour chaque contrôle WebView2
Auparavant, sans prise en charge de plusieurs profils, pour obtenir la séparation des données, une application WebView2 pouvait utiliser différents dossiers de données utilisateur pour différents contrôles WebView2. Toutefois, dans cette approche, vous devez exécuter plusieurs instances de runtime WebView2 (chacune incluant un processus de navigateur et un ensemble de processus enfants), qui ont consommé davantage de ressources système, notamment la mémoire, l’encombrement du processeur et l’espace disque.
Spécifier le profil lors de la création d’un WebView2
Créer un objet options qui définit un profil
La CreateCoreWebView2ControllerOptions méthode sur CoreWebView2Environment crée un objet options, CoreWebView2ControllerOptions, pour fournir des informations spécifiques sur un profil, notamment ProfileName et IsInPrivateModeEnabled. Utilisez cet objet pour spécifier le profil cible lors de la création d’une instance de contrôle WebView2.
Chaque Create...Controller méthode qui accepte un options paramètre crée un contrôle WebView2 et l’associe au profil que vous avez spécifié. Si le profil spécifié n’existe pas, un nouveau profil est créé.
Une fois que vous avez obtenu l’objet de profil, vous pouvez le manipuler. Utilisez CoreWebView2Profile pour obtenir des informations de profil et effectuer des paramètres et des opérations à l’échelle du profil.
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);
}
// ...
}
Voir aussi
Plusieurs profils dans Vue d’ensemble des fonctionnalités et API WebView2.