.NET 8 MAUI WebView中JavaScript Cookie访问被拒绝?求解决方案
针对.NET 8 MAUI的Windows 10.0.22621和Android 14平台,要让WebView加载的本地HTML页面直接通过JavaScript读写Cookie,需分平台配置:
Windows平台(WebView2)
Windows端WebView基于WebView2控件,需确保启用Cookie并配置本地资源的Cookie权限:
- 在WebView的
Loaded事件中获取WebView2实例,配置CoreWebView2的Cookie相关设置:
private async void WebView_Loaded(object sender, EventArgs e) { if (sender is WebView webView) { #if WINDOWS var webView2 = webView.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2; if (webView2 != null) { // 等待WebView2初始化完成 await webView2.EnsureCoreWebView2Async(); // 启用Cookie及脚本支持 webView2.CoreWebView2.Settings.AreCookiesEnabled = true; webView2.CoreWebView2.Settings.IsScriptEnabled = true; // 允许本地MAUI资源URI(ms-appx-web://)使用Cookie await webView2.CoreWebView2.CookieManager.SetCookieAsync("ms-appx-web:///", "path=/"); } #endif } }
- 确保WebView的Source使用正确的本地资源URI格式:
webView.Source = new UrlWebViewSource { Url = "ms-appx-web:///Assets/your-html-file.html" };
Android平台
Android端需配置WebView的WebSettings和CookieManager,开放Cookie读写权限:
- 在
MainActivity.cs中通过WebViewHandler统一配置:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMapping("EnableCookieSupport", (handler, view) => { #if ANDROID var androidWebView = handler.PlatformView as Android.Webkit.WebView; if (androidWebView != null) { var webSettings = androidWebView.Settings; // 启用JavaScript和DOM存储 webSettings.JavaScriptEnabled = true; webSettings.DomStorageEnabled = true; // 允许本地资源访问 webSettings.AllowFileAccess = true; webSettings.AllowContentAccess = true; // 启用Cookie支持 Android.Webkit.CookieManager.Instance.SetAcceptCookie(true); // Android 12+需额外允许第三方Cookie(适配本地页面场景) if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu) { Android.Webkit.CookieManager.Instance.SetAcceptThirdPartyCookies(androidWebView, true); } } #endif }); }
- WebView的Source使用Android本地资源URI格式:
webView.Source = new UrlWebViewSource { Url = "file:///android_asset/your-html-file.html" };
通用配置
在XAML或代码中确保WebView启用JavaScript:
<WebView IsJavaScriptEnabled="True" Loaded="WebView_Loaded" />
配置完成后,HTML页面中的JavaScript代码即可直接使用document.cookie进行读写操作,无需通过C#后台中转。
内容的提问来源于stack exchange,提问作者Hưng Nguyễn
相关产品推荐
相关产品推荐

