强制从应用程序在移动浏览器中打开新选项卡

9o685dep  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(280)

我有一个应用程序,它在xamarin中有一个webview,并显示一个具有以下配置的链接的web:

<a target="_blank" href="http://www.web.com"> http://www.web.com </a>

但它们不起作用,我想这是因为当从应用程序查看web时,它无法在新窗口中打开链接。我也尝试过window.open而不做任何更改。如何配置链接以使用新链接窗口强制打开浏览器。
谢谢

92vpleto

92vpleto1#

正如您所想,xamarin.forms不支持打开新选项卡/窗口。但是webview组件有一个名为“导航”的事件处理程序,每次webview尝试打开新页面时,您都可以在该处理程序上订阅执行代码。

public void NavigatingEventHandler(object sender, WebNavigatingEventArgs args)
{
    if (args.Url.StartsWith("https://"))
    {
        //If you want to open the new window in the OS browser
        Device.OpenUri(new Uri(args.Url));

        //If you want to open the new window inside the webview
        webview.Source = args.Url;

        args.Cancel = true;
    }
}

xaml: <WebView x:Name="webview" Navigating="NavigatingEventHandler" />

mgdq6dx1

mgdq6dx12#

我认为这应该发生在明天 Android ,如果要使用浏览器打开新窗口,可以使用 SetWebChromeClient 你的方法 WebView 在自定义渲染器中。
在android项目中创建自定义渲染器:

[assembly: ExportRenderer(typeof(WebView), typeof(AndroidWebView))]
namespace your namespace
{
  class AndroidWebView:WebViewRenderer
  {
      public AndroidWebView(Context context) : base(context)
      {

      }

      protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
      {
          base.OnElementChanged(e);
          Control.SetWebChromeClient(new MywebviewChrome());
      }

      private class MywebviewChrome : Android.Webkit.WebChromeClient
      {
          public override bool OnCreateWindow(Android.Webkit.WebView view, bool isDialog, bool isUserGesture, Message resultMsg)
          {
              Android.Webkit.WebView.HitTestResult result = view.GetHitTestResult(); 
              string data = result.Extra; 
              Context context = view.Context; 
              Intent browserIntent = new Intent(Intent.ActionView,Android.Net.Uri.Parse(data)); 
              context.StartActivity(browserIntent);

              return false;
          }

      }
  }
}

在表单项目xaml中:

<WebView HeightRequest="800" WidthRequest="600" x:Name="webview" ></WebView>

在您的page.xaml.cs中:

var htmlSource = new HtmlWebViewSource();
htmlSource.Html = @"<a target='_blank' href='http://www.web.com'> http://www.web.com </a>";
webview.Source = htmlSource;

相关问题