Xamarin Forms WebView open external link

mic*_*nha 5 xamarin.ios xamarin.android xamarin

I have a webview inside my application and when an external link is clicked (that in normal browser is open in a new tab), I can't then go back to my website.

It is possible when a new tab is open to have the menu closed that tab like Gmail do ?

在此处输入图片说明

目标是,无论何时点击链接,用户都可以选择查看内容的选项,例如,点击链接会建议打开 youtube 应用程序或谷歌浏览器。目的是出现谷歌浏​​览器选项

或者你有什么建议来处理这种情况?

Mih*_*hev 6

如果我理解正确的话,您希望能够选择如何打开 Web 链接 - 在您的应用程序内部或在另一个应用程序(浏览器)上下文中。

如果这是正确的,那么您可以使用Xamarin.Essentials:浏览器功能。

public async Task OpenBrowser(Uri uri)
{
    await Browser.OpenAsync(uri, BrowserLaunchMode.SystemPreferred);
}
Run Code Online (Sandbox Code Playgroud)

这里重要的属性是BrowserLaunchModeflag,你可以在这里了解更多信息

基本上,你有两个选择 - External& SystemPreferred

  1. 我认为第一个很清楚 - 它将在外部浏览器中打开链接。
  2. 第二个选项利用 Android 的Chrome 自定义选项卡和 iOS - SFSafariViewController

PS 您还可以自定义PreferredToolbarColorTitleMode等。

编辑:根据您在评论中的反馈,您希望控制如何从您的网站打开 href 链接。

如果我理解正确的话,您希望第一次打开网站时不要在顶部显示导航栏,然后再打开它。不幸的是,这是不可能的。

您可以实现相反的行为 - 第一次打开网站时,有导航栏,如果用户单击任何链接,则从外部打开它(在浏览器内)。为此,您有 2 个选择:

  1. 要从您的网站执行此操作 - 将标签a的目标更改为_blank这样;
  2. 要从您的移动应用程序执行此操作 -为 WebView创建自定义渲染器。在 Android 项目的渲染器实现中,将Control'更改WebViewClient为:
    public class CustomWebViewClient : WebViewClient
    {
        public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
        {
            Intent intent = new Intent(Intent.ActionView, request.Url);
            CrossCurrentActivity.Current.StartActivity(intent);
            return true;
        }
    }
Run Code Online (Sandbox Code Playgroud)