我正在开发一个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;
}
请帮助如何实现它。
先谢谢
答案 0 :(得分:2)
我认为您可以尝试使用WebViewRenderer
来实现这一目标。在表单中创建类似MyWebView
的WebView,并在每个平台上实现渲染器。
[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;
}
}
}
[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
在表单中加载您的网址。
答案 1 :(得分:-1)
使用Device.OpenUri
并传递您的网址。
Device.OpenUri(new Uri(request.Url));
您可以使用UIApplication.SharedApplication.OpenUrl
,但是您应该创建一个新的NSUrl
对象,并传入您的网址。
UIApplication.SharedApplication.OpenUrl(new NSUrl(request.Url));