You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:55:23