Xamarin Forms UWP应用中WebView控件突然无法正常工作
UWP WebView登录控件突然空白失效排查
我开发的一款UWP应用,启动时通过URL完成登录,此前一直使用WebView控件实现该功能且运行正常。近期未修改任何与登录流程相关的代码,该控件却突然显示空白。当前使用VS Community 2022开发,项目最初基于VS Community 2019、.NET Standard 2、Prism 7.2构建。
调试输出显示LoginURL和RedirectURL均有效,将这些URL复制到浏览器也能正常访问,但应用中的WebView控件始终空白。
XAML代码
<ScrollView> <WebView x:Name="webView" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Source="{Binding LoginURL}"/> </ScrollView>
视图模型关键代码
private string _loginURL; public string LoginURL { get => _loginURL; set => SetProperty(ref _loginURL, value); } private string _redirectURL; public string RedirectURL { get => _redirectURL; set => SetProperty(ref _redirectURL, value); } private void StartLogin(bool userInitialized) { try { if (userInitialized) { RedirectURL = _loginService.RedirectURL; LoginURL = _loginService.LoginURL; Debug.WriteLine("RedirectURL: " + RedirectURL); Debug.WriteLine("LoginURL: " + LoginURL); } } catch (Exception e) { _logService.LogError(e.Message); } }
用户控件后台代码
public LoginView() { InitializeComponent(); webView.Navigating += CatchRedirectURL; } private async void CatchRedirectURL(object sender, WebNavigatingEventArgs e) { Debug.WriteLine("e.Url: " + e.Url); Debug.WriteLine("webView.Source: " + (webView.Source as UrlWebViewSource).Url); var vm = BindingContext as LoginViewModel; if (e.Url.Contains(vm.RedirectURL)) { var webViewSender = (WebView)sender; e.Cancel = true; // 阻止后续跳转 var requestToken = ExtractRequestToken(e.Url); var user = await vm.GenerateSessionAsync(requestToken); var htmlSource = new HtmlWebViewSource(); if (user.AccessToken == null) { string msg = "Login Unsuccessful"; htmlSource.Html = @"<html><body> <h1 style=""text-align:center;"">" + msg + @"</h1> <p style=""text-align:center;"">oops...something went wrong.</p> </body> </html>"; } else { string msg = "Hello, " + user.UserShortName + "!"; htmlSource.Html = @"<html><body> <h1 style=""text-align:center;"">" + msg + @"</h1> <p style=""text-align:center;"">Welcome</p> </body> </html>"; } webViewSender.Source = htmlSource; } }
排查方向
- WebView组件兼容性:UWP的WebView有新旧两个版本,若系统自动更新导致组件版本变更,可尝试切换到WebView2控件测试,确认是否为旧WebView的兼容性问题。
- 内容安全或权限限制:检查登录页面是否新增了CSP(内容安全策略),限制了非浏览器环境的加载;同时确认应用Package.appxmanifest中的网络访问权限未被意外修改。
- 绑定时机问题:WebView的Source绑定可能在BindingContext设置前执行,导致URL未正确加载。可在视图模型的LoginURL属性变更时,手动调用
webView.Navigate(new Uri(LoginURL)),替代依赖绑定的方式。 - 导航错误捕获:添加WebView的
NavigationFailed事件监听,查看是否存在未捕获的导航错误(如证书验证失败、跳转异常等)。 - Prism生命周期校验:检查Prism视图生命周期,确认
StartLogin方法是否在视图完全加载后调用,避免URL设置时WebView尚未初始化完成。 - VS版本迁移影响:从VS2019迁移到VS2022后,项目的目标平台版本或.NET版本可能被自动修改,导致WebView行为变化。可检查项目属性中的目标平台版本,尝试回退到之前的版本测试。
内容的提问来源于stack exchange,提问作者yoursvsr
相关产品推荐
相关产品推荐

