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
相关产品推荐
相关产品推荐

