在 Xamarin iOS WebView 中显示错误

Posted

技术标签:

【中文标题】在 Xamarin iOS WebView 中显示错误【英文标题】:Show errors in Xamarin iOS WebView 【发布时间】:2020-10-22 11:33:40 【问题描述】:

如果连接失败,Xamarin Forms WebView 控件会显示白色表面。在 ios 上,我想显示我能得到的任何错误信息。

我正在使用此代码来覆盖 WkWebViewRenderer:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview

[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace CustomRenderer.iOS

    public class HybridWebViewRenderer : WkWebViewRenderer, IWKScriptMessageHandler
    
        public HybridWebViewRenderer() : this(new WKWebViewConfiguration())
        
        
    

我还发现这个帖子现在已经过时了:

https://forums.xamarin.com/discussion/175060/how-can-i-display-a-detailed-error-code-retuned-from-a-webview?

如何处理 LoadFailed/Connection 错误并使用 WkWebViewRenderer 将它们显示给用户?

【问题讨论】:

【参考方案1】:

对于WkWebViewRenderer,我们需要实现WKNavigationDelegate

public class HybridWebViewRenderer : WkWebViewRenderer, IWKScriptMessageHandler 

    public HybridWebViewRenderer()
    
    

    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    
        base.OnElementChanged(e);

        if(e.NewElement!=null)
        
            this.NavigationDelegate = new NavigationDelegate();
        

    

    public void DidReceiveScriptMessage(WKUserContentController userContentController, WKScriptMessage message)
    
        throw new NotImplementedException();
    


public class NavigationDelegate : WKNavigationDelegate


    public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, WKWebpagePreferences preferences, Action<WKNavigationActionPolicy, WKWebpagePreferences> decisionHandler)
    
      //  base.DecidePolicy(webView, navigationAction, preferences, decisionHandler);

        decisionHandler.Invoke(WKNavigationActionPolicy.Allow, preferences);

    

    public override void DidFailNavigation(WKWebView webView, WKNavigation navigation, NSError error)
    
        base.DidFailNavigation(webView, navigation, error);

        //...load fail

    

    public override void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
    
        base.DidFinishNavigation(webView, navigation);

        //...load success
    

【讨论】:

我正在尝试使用这一行输出错误:webView.LoadhtmlString("

Error: " + error.ToString() + "

正文>", null);但我仍然得到一个白色的表面
你把线路代码放在哪里了?尝试检测错误状态以调用命令。查看链接:***.com/a/31703256/11083277 @Rugbrød 现在可以用了吗?或者您可以将您的示例分享到 github,以便我可以在我这边进行测试。 我不知道它是否有效。我有一个不同的问题,WebView 根本不会显示任何 URL... 你能把你的项目分享到github上,我会检查它。

以上是关于在 Xamarin iOS WebView 中显示错误的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin表单:ios平台上的webview中视频未完全填充

最新 iOS 更新 (12.2) 后,本地存储中的视频未在 WebView (Xamarin.Forms) 中播放

Android 上的 Xamarin WebView 显示多个实例

Xamarin iOS WebView 为空白

Xamarin iOS WKWebView 不显示谷歌recaptcha

如何在 Android 上使用 Xamarin WebView 下载本机浏览器等文件?