当单击Xamarin表单iOS中的WebView时,如何在设备浏览器中打开链接



我正在开发Xamarin形式的跨图表应用程序,我正在使用WebView将外部HTML页面加载到其中,现在我们在该html页面中有一个锚标记,在此处,当用户单击iOS和Android时,我在设备浏览器中打开该链接AppDelegate.cs文件中的代码iOS文件,但它不起作用

 private bool HandleShouldStartLoad(UIWebView webview,NSUrlRequest request,UIWebViewNavigationType navtype)
    {
        if(navtype==UIWebViewNavigationType.LinkClicked)
        {
            UIApplication.SharedApplication.OpenUrl(request.Url);
            return false;
        }  
        return true;
    }

请帮助如何实现它。

预先感谢

我认为您可以尝试使用WebViewRenderer来实现这一目标。在表单中创建一个诸如MyWebView之类的WebView,并在每个平台上实现渲染器。

在iOS上:

[assembly: ExportRenderer(typeof(MyWebView), typeof(MyWebViewRenderer))]
namespace OpenUriDemo.iOS
{
    public class MyWebViewRenderer : WebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
            if (NativeView != null)
            {
                ((UIWebView)NativeView).Delegate = new MyWebViewDelegate();
            }
        }
    }
    public class MyWebViewDelegate : UIWebViewDelegate
    {
        public override bool ShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType)
        {
            if (navigationType == UIWebViewNavigationType.LinkClicked)
            {
                UIApplication.SharedApplication.OpenUrl(request.Url);
                return false;
            }
            return true;
        }
    }
}

在Android上:

[assembly: ExportRenderer(typeof(MyWebView), typeof(MyWebViewRenderer))]
namespace OpenUriDemo.Droid
{
    public class MyWebViewRenderer : WebViewRenderer
    {
        public MyWebViewRenderer(Context context) : base(context)
        {
        }
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
        {
            base.OnElementChanged(e);
            Control.SetWebViewClient(new MyWebViewClient());
        }
    }
    public class MyWebViewClient : WebViewClient
    {
        public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, string url)
        {
            if (url != "Your First Request Url")
            {
                Intent i = new Intent(Intent.ActionView);
                i.SetData(Android.Net.Uri.Parse(url));
                Xamarin.Forms.Forms.Context.StartActivity(i);
                return false;
            }
            return true;
        }
    }
}

使用MyWebView将URL加载为表格。

使用 Device.OpenUri并通过您的URL。

Device.OpenUri(new Uri(request.Url));

您可以使用UIApplication.SharedApplication.OpenUrl,但是您应该创建一个新的NSUrl对象,传递URL。

UIApplication.SharedApplication.OpenUrl(new NSUrl(request.Url));

最新更新