WebView заканчивается в бесконечном l oop при возврате, если он идет по альтернативной ссылке - PullRequest
1 голос
/ 05 марта 2020

Возьмем, к примеру, URL https://www.bbc.co.uk/sport/football/51519206. В теле ответа он отправляет обратно <link rel="alternate" hreflang="en" href="https://www.bbc.com/sport/football/51519206" />, что во многих случаях приводит браузер и - в моем случае - WebView для перехода по альтернативной ссылке и загрузки этой страницы. Это все хорошо.

Проблема в том, когда пользователь хочет go назад. В браузере вы увидите, что при нажатии назад вы не вернетесь к адресу co.uk, с которого пришло перенаправление. И такое поведение я бы ожидал от WebView. Однако WebView canGoBack() вернет true, а goBack() заставит WebView загрузить адрес co.uk, а затем снова выполнить перенаправление. Таким образом, пользователь застревает, если не щелкнуть два раза назад очень быстро.

Есть ли способ обойти это поведение? Есть ли, например, способ сделать один из следующих вариантов?

  • Установить некоторые настройки, чтобы goBack() работал так, как ожидал пользователь.
  • Знаете ли, что загруженный URL был вызван перенаправлением и что goBack() должен вызываться дважды / X раз? (WebResourceRequest возвращает false для isRedirect() (как и ожидалось для серверных перенаправлений).)
  • Скажите WebView не переходить по альтернативным ссылкам

1 Ответ

0 голосов
/ 07 марта 2020

В моем тестировании window.history.back() в javascript вместо goBack() веб-просмотра будет работать, как вы ожидаете. Так что mWebView.evaluateJavascript("window.history.back();");.

За кулисами WebView - это просто Chromium, поэтому странно, что поведение goBack отличается.

...