srinivas challa
srinivas challa

Reputation: 193

How to open link in Device browser when click on webview in xamarin forms iOS

I am developing a xamarin forms cross-plotform application, I am using webview to load an external html page into it, Now we have an anchor tag in that html page, Here how to open that link in device browser when user clicks on it for both iOS and Android, i have write following block of code in AppDelegate.cs file for iOS but it is not working

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

Please Help How to achieve it.

Thanks in Advance

Upvotes: 1

Views: 5995

Answers (2)

Ax1le
Ax1le

Reputation: 6643

I think you can try to achieve this by using a WebViewRenderer. Create a WebView like MyWebView in forms and implement renderers on each platform.

On 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;
        }
    }
}

On 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;
        }
    }
}

Use MyWebView to load your url in Forms.

Upvotes: 5

Venkata Swamy Balaraju
Venkata Swamy Balaraju

Reputation: 1481

Use Device.OpenUri and pass your URL.

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

You can use UIApplication.SharedApplication.OpenUrl, but you should create a new NSUrl object, passing in your URL.

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

Upvotes: -1

Related Questions