如何配置C# Microsoft.Web.WebView2.WinForms记住地理位置权限选择
解决方案
关于Cookie的疑问
Cookie仅用于存储网站的会话、用户偏好等数据,地理位置权限的设置并不保存在Cookie中,而是存储在WebView2的用户数据目录里。你没清除Cookie但权限不被记住,是因为默认情况下WebView2会使用临时用户数据目录,每次启动都会重置所有非Cookie的本地数据(包括权限设置),这不是Cookie的问题。
方法1:让WebView2记住用户的权限选择
要让权限设置持久化,关键是指定一个固定的用户数据目录,让WebView2将权限偏好、缓存等数据保存在这个目录里,下次启动时就能读取之前的选择。
在初始化WebView2时,通过CoreWebView2EnvironmentOptions指定用户数据目录:
using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.WinForms; using System.IO; using System.Windows.Forms; private async void Form1_Load(object sender, EventArgs e) { // 指定固定的用户数据目录,比如应用程序目录下的WebView2Data文件夹 string userDataFolder = Path.Combine(Application.StartupPath, "WebView2Data"); var envOptions = new CoreWebView2EnvironmentOptions(); var env = await CoreWebView2Environment.CreateAsync(null, userDataFolder, envOptions); await webView21.EnsureCoreWebView2Async(env); }
设置后,用户第一次授予地理位置权限后,后续启动WebView2会自动读取该目录下的权限设置,不再重复询问。
方法2:默认自动授予地理位置权限
如果想跳过用户确认,直接默认允许地理位置访问,可以通过监听CoreWebView2.PermissionRequested事件,在事件中自动授权:
using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.WinForms; using System.Windows.Forms; private async void Form1_Load(object sender, EventArgs e) { await webView21.EnsureCoreWebView2Async(); // 订阅权限请求事件 webView21.CoreWebView2.PermissionRequested += CoreWebView2_PermissionRequested; } private void CoreWebView2_PermissionRequested(object sender, CoreWebView2PermissionRequestedEventArgs e) { // 判断权限类型是否为地理位置 if (e.PermissionKind == CoreWebView2PermissionKind.Geolocation) { // 自动授予权限 e.State = CoreWebView2PermissionState.Allowed; e.Handled = true; } }
这种方式下,无论用户之前是否设置过权限,WebView2都会直接允许网站访问地理位置,不会弹出询问框。
内容的提问来源于stack exchange,提问作者mih
相关产品推荐
相关产品推荐

