Как я могу заставить внутренние ссылки загружаться в webview?

#java #android

#java #Android

Вопрос:

У меня возникают проблемы при попытке открыть внутренние ссылки в моем клиенте Android на базе webview, который я делаю для малого бизнеса. Что мне нужно сделать, чтобы приложение могло открывать ссылки только с помощью «https://forums.mywebsite.com «и «https://mywebsite.com«?

У меня уже есть процедура, необходимая для открытия внешних ссылок с помощью action view, но это приводит только к удалению ссылок с первой страницы, указанной в loadurl(), и не связывает их внутри клиента, а рассматривает их как внешние ссылки.

 aWebView.setWebViewClient(new WebViewClient() {
                                          @Override
                                          @TargetApi(21)
                                          public boolean shouldOverrideUrlLoading(WebView aWebView, WebResourceRequest request) {
                                              Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());

                                              superWebView.getContext().startActivity(intent);

                                              return true;
                                          }
                                      });
  

TL; DR: ожидания ссылок не работают, и любая помощь была бы признательна.

Ответ №1:

Как объясняется в документах:

возврат true приводит к тому, что текущий WebView прерывает загрузку URL-адреса, в то время как возврат false приводит к тому, что WebView продолжает загрузку URL-адреса как обычно.

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

Что-то в этом роде:

     WebView.setWebViewClient(new WebViewClient() {
        @Override
        @TargetApi(21)
        public boolean shouldOverrideUrlLoading(WebView aWebView, WebResourceRequest request) {
            if (TextUtils.equals(request.getUrl().toString(), "https://forums.mywebsite.com")
                    ||TextUtils.equals(request.getUrl().toString(), "https://mywebsite.com")) {
                return false;
            } else {
                Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
                superWebView.getContext().startActivity(intent);
                return true;
            }
        }
    });
  

Комментарии:

1. Можете ли вы привести пример этого? Единственная документация, которую я смог найти, была для версий api до api 24 и не работает в SDK, который я использую.

2. Отредактировал ответ, чтобы добавить пример