打开 target="_blank" 与 Xamarin.Forms WebView 的链接

Opening target="_blank" links with Xamarin.Forms WebView

我最近遇到了 target 属性设置为 _blank 的链接问题。轻敲它们没有效果。 WebView 不加载链接页面。

四处搜索我找到了这个解决方案:https://github.com/xamarin/Xamarin.Forms/issues/12917 which is setting SetSupportMultipleWindows(false). More specifically the suggestion is 插入以下代码行:webView.Settings.SetSupportMultipleWindows(true);.

尝试出现以下错误:Error CS1061 'WebView' does not contain a definition for 'Settings' and no accessible extension method 'Settings' accepting a first argument of type 'WebView' could be found (are you missing a using directive or an assembly reference?)

有没有办法克服这个错误?

您可以在 Hybrid 渲染器OnElementChanged 中添加对多个 windows 的支持,代码为:

Control.Settings.SetSupportMultipleWindows(true);

编辑:

public class MyWebViewRenderer : WebViewRenderer
    {
        public MyWebViewRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
        {
            base.OnElementChanged(e);

            if(Control!=null)
            {
                Control.Settings.SetSupportMultipleWindows(true);
                Control.Settings.JavaScriptEnabled = true;
                Control.SetWebChromeClient(new MyWebChromeClient());
            }

        }

    }

    public class MyWebChromeClient: WebChromeClient
    {
        public override bool OnCreateWindow(Android.Webkit.WebView view, bool isDialog, bool isUserGesture, Message resultMsg)
        {

            if(!isDialog)
            {
                return true;
            }

            return base.OnCreateWindow(view, isDialog, isUserGesture, resultMsg);
        }
    }

}

在朝着错误的方向多次尝试后,我找到了适合我的代码行。在 Custom Webview Renderer 中的 OnElementChanged 方法的覆盖中,这是使打开具有 target=_blank 属性的链接成为可能的代码:

Control.Settings.SetSupportMultipleWindows(false);

SetSupportMultipleWindows; 应设置为 false,而不是 true 正如建议的那样。