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.
Device.OpenUri()
– SashaUIApplication.SharedApplication.OpenUrl(request.Url);
withDevice.OpenUri(New Uri(request.Url));
– Sasha