混合 WebView 导航和导航事件在 Xamarin 表单中没有响应

Posted

技术标签:

【中文标题】混合 WebView 导航和导航事件在 Xamarin 表单中没有响应【英文标题】:Hybrid WebView Navigating and navigated events not responding in Xamarin Forms 【发布时间】:2021-12-08 18:55:51 【问题描述】:

我有一个混合 Webview 正在调用页面,当它调用时,我希望能够使用 Navigated 和 Navigating 事件处理错误。这是我下面的代码:

<StackLayout HorizontalOptions="FillAndExpand" BackgroundColor="Binding ThemeColor" IsVisible="Binding IsAdvert">
                <local:HybridWebView x:Name="hybridWebView" Navigated="webOnEndNavigating" Navigating="Webview_Navigating" Uri="Binding Source" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" />
</StackLayout>

那么在事件所在的.cs代码中是:

void webOnEndNavigating(object sender, WebNavigatedEventArgs e)
        
            progress.IsVisible = false;
            try
            
                switch (e.Result)
                
                    case WebNavigationResult.Cancel:

                        Navigation.PopAsync();
                        break;

                    case WebNavigationResult.Failure:

                        var isConnected = Connectivity.NetworkAccess;

                        if (isConnected != NetworkAccess.Internet)
                        
                            Navigation.PushModalAsync(new Offline());
                            Navigation.PopAsync();
                        
                        break;

                    case WebNavigationResult.Success:
                        mnu.IsEmptyList = false;
                        break;

                    case WebNavigationResult.Timeout:
                        Navigation.PushModalAsync(new Offline());
                        Navigation.PopAsync();
                        break;

                    default:
                        Navigation.PushModalAsync(new Offline());
                        Navigation.PopAsync();
                        break;
                
            
            catch
            
                Navigation.PushModalAsync(new Offline());
                Navigation.PopAsync();
            
        

        private void Webview_Navigating(object sender, WebNavigatingEventArgs e)
                   
           progress.IsVisible = true;           
        

我在我的 switch 语句的每个案例的每一端都设置了断点,甚至在我的事件的入口级别,但我没有得到任何关于我正在调用的站点的成功呈现或失败或超时的任何东西。我该如何处理?

【问题讨论】:

【参考方案1】:

根据xamarin文档:

ios 上,此 html 文件位于平台的 Content 文件夹中 项目,具有 BundleResource 的构建操作。在 android 上,这个 HTML 文件位于平台项目的 Assets/Content 文件夹中, 使用 AndroidAsset 的构建操作。

我根据这个sample做了一个测试,方法可以工作。因此,您可以检查您的网页,看看它是否在正确的位置。

更多信息可以参考这个https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview

【讨论】:

以上是关于混合 WebView 导航和导航事件在 Xamarin 表单中没有响应的主要内容,如果未能解决你的问题,请参考以下文章

混合 iOS Web 和原生应用事件的通信

APPIUM ANDROID 混合应用程序:在混合应用程序中从本机导航到 Web 视图时,无法将驱动程序上下文获取为“WEBVIEW”

如何正确使用 swipeWithEvent 导航 webView,Obj-C

从 Windows Store App 中的 WebView 捕获到自定义协议的导航

如果“target=_blank”,Xamarin Android WebView 不会触发导航

新导航和 webview 中的 Uiwebview 链接