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

Xamarin Forms中Webview跳转至非Webview原生应用页面的问题咨询

问题原因

你现有代码存在以下几个核心问题:

  • 冗余创建了新的WebView实例并调用Reload(),和当前触发Navigated事件的WebView没有关联,完全无效
  • Thread.Sleep(1000)会阻塞UI线程,不仅不会实现预期的等待效果,还会导致界面假死
  • 仅实例化了NavigationPage和MainPage,没有将页面推入当前应用的导航栈,自然不会触发跳转逻辑

修复方案

首先要确保你的应用根视图是NavigationPage包裹的初始页面(通常在App.xaml.cs的构造函数里设置:MainPage = new NavigationPage(new YourFirstPage());),再按照如下代码修改逻辑:

private async void WebView_Navigated(object sender, WebNavigatedEventArgs e)
{
    // 删掉无用的WebView创建和Reload逻辑
    if (e.Url.Contains("thank-you-woo"))
    {
        // 用异步等待替代Thread.Sleep,不阻塞UI
        await Task.Delay(1000);
        await DisplayAlert("Track", "Tracking Started", "Close this alert");
        // 直接调用当前页面的Navigation实例Push目标页面,不需要重复创建NavigationPage
        await Navigation.PushAsync(new MainPage());
        // 如果不需要保留WebView页面在栈里,跳转后可以把它删掉
        Navigation.RemovePage(this);
    }
}

注意:如果你要跳转的MainPage本身就是应用的根页面,不要用PushAsync,直接修改Application.Current.MainPage即可:

Application.Current.MainPage = new NavigationPage(new MainPage());

额外说明

  • 导航操作必须调用当前页面绑定的Navigation实例的对应方法,仅实例化页面对象不会触发跳转
  • 所有涉及UI交互的异步操作都要加async/await,避免阻塞UI线程

内容的提问来源于stack exchange,提问作者GreyCats

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:04