首页 文章

如何在xamarin表单iOS中单击webview时在设备浏览器中打开链接

提问于
浏览
1

我正在开发一个xamarin表格交叉绘图形式的应用程序,我正在使用webview将外部html页面加载到其中,现在我们在该html页面中有一个锚标记,这里是如何在用户点击它时在设备浏览器中打开该链接无论是iOS还是Android,我都在iOS的AppDelegate.cs文件中编写了以下代码块,但它无法正常工作

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

请帮助如何实现它 .

提前致谢

2 回答

  • -1

    使用 Device.OpenUri 并传递您的网址 .

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

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

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

    我想你可以尝试使用 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 在表单中加载您的网址 .

相关问题