首页 > 解决方案 > Xamarin Forms WebView 打开外部链接

问题描述

我的应用程序中有一个 webview,当单击外部链接(在普通浏览器中在新选项卡中打开)时,我无法返回我的网站。

当一个新标签打开时,有可能像 Gmail 一样关闭该标签的菜单吗?

在此处输入图像描述

目的是,每当单击链接时,用户都可以选择使用哪个选项来查看内容,例如单击链接将建议打开 youtube 应用程序或谷歌浏览器。目的是出现 google chrome 选项

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

标签: xamarinxamarin.androidxamarin.ios

解决方案


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

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

public async Task OpenBrowser(Uri uri)
{
    await Browser.OpenAsync(uri, BrowserLaunchMode.SystemPreferred);
}

这里重要的属性是BrowserLaunchMode标志,您可以在此处了解更多信息

基本上,您有 2 个选项 - External& SystemPreferred

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

PS您还可以自定义PreferredToolbarColor,,TitleMode等。

编辑:根据您在评论中的反馈,您希望控制如何从您的网站打开 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;
        }
    }

推荐阅读