Xamarin Forms WebView открыть внешнюю ссылку - PullRequest
4 голосов
/ 05 мая 2020

У меня есть веб-просмотр внутри моего приложения, и при нажатии внешней ссылки (которая в обычном браузере открывается в новой вкладке) я не могу go вернуться на свой веб-сайт.

Это возможно, когда открыта новая вкладка, чтобы закрыть меню на этой вкладке, как это делает Gmail?

enter image description here

Цель состоит в том, чтобы при каждом нажатии на ссылку , у пользователя будет возможность выбрать, с какой опцией просматривать контент, например, при нажатии на ссылку будет предложено открыть приложение YouTube или Google chrome. Цель состоит в том, чтобы отобразить параметр google chrome

Или какие предложения у вас есть для решения этой ситуации?

1 Ответ

1 голос
/ 05 мая 2020

Если я вас правильно понял, вы хотите иметь возможность выбрать способ открытия веб-ссылки - внутри вашего приложения или в контексте другого приложения (браузера).

Если это верно, то вы может использовать Xamarin.Essentials: браузер функциональность.

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

Здесь важным свойством является флаг BrowserLaunchMode, о котором вы можете узнать больше здесь

В основном у вас есть 2 варианта - External & SystemPreferred.

  1. Первый вариант понятен, думаю - откроет ссылку во внешнем браузере.
  2. Второй вариант использует Android s Chrome Пользовательские вкладки и для iOS - SFSafariViewController

PS Вы также можете настроить PreferredToolbarColor, TitleMode и т.д. c.

Изменить: исходя из ваших отзывов в комментариях, вы хотите контролировать, как открывать href-ссылки со своего веб-сайта.

Если я правильно понял, вы хотите, чтобы при первом открытии сайта не было панели навигации вверху, а после этого она была. К сожалению, это невозможно.

Вы можете добиться противоположного поведения - когда вы впервые открываете веб-сайт, чтобы иметь панель навигации и, если пользователь нажимает на любую ссылку, открывать ее извне (внутри браузер). У вас есть 2 варианта:

  1. Чтобы сделать это со своего веб-сайта - измените цель тега a на _blank как это ;
  2. Чтобы сделать это из вашего мобильного приложения - создайте Custom Renderer для WebView. В реализации рендерера проекта Android измените Control s 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;
        }
    }
...