在 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 显示多个实例