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

标签 android ios xamarin.forms cross-platform hybrid-mobile-app

我正在开发一个 xamarin 表单跨平台应用程序, 我正在使用 webview 将外部 html 页面加载到其中,现在我们在该 html 页面中有一个 anchor 标记,这里是当用户在 iOS 和 Android 上单击它时如何在设备浏览器中打开该链接,我写了以下 block 适用于 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;
    }

请帮助如何实现它。

提前致谢

最佳答案

我认为您可以尝试使用 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;
        }
    }
}

在安卓上:

[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。

关于android - 在 xamarin forms iOS 中单击 webview 时如何在设备浏览器中打开链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48685382/

相关文章:

java - 如何快速制作我的 Android 应用程序

ios - UINavigationController 标题不显示?

ios - 将外部图像路径添加到基于 PhoneGap 的应用程序的外部列表后仍然不显示

xamarin.forms - Xamarin 形式的流畅设计

c# - 我们如何共享我们的 xamarin 应用程序?

xamarin - 如何支持 Xamarin 表单中的辅助功能字体大小?

android - 将折叠工具栏标题更改为微调器

构建apk后找不到Java静态接口(interface)方法

android - 将SD卡中的图像放入android中的imageview

ios - 使用 Firestore 中的数据填充 TableView