Похоже, что методы WebViewClient, такие как shouldInterceptRequest(), onPageStarted() и shouldOverrideUrlLoading(), прослушивают только изменения URL-адресов, которые заставляют WebView загружать новую страницу. Есть ли способ обнаружить изменения URL-адресов для идентификаторов фрагментов, например index.html#fragment_id, в WebView?
Прослушивание изменения идентификатора фрагмента URL в WebView
comment
Используйте JavascriptInterface события webview и окна hashChange в javascript
- person mitvenkatesan   schedule 30.10.2014
Ответы (2)
Я знаю, что это действительно старый вопрос, но я нашел решение, которого нет нигде в Stack Overflow. Ответ jpetitto работает, но он портит javascript, если мы используем изменение хэша для маршрутизации или других подобных функций.
Я обнаружил, что переопределяя метод doUpdateVisitedHistory
в WebViewClient
, мы можем перехватывать URL-адреса при изменении хэша. См. ниже фрагмент, например.
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
super.doUpdateVisitedHistory(view, url, isReload);
// somecode to run on hash change.
}
}
Примечание: этот метод запускается при изменении хэша и URL-адреса.
person
Srin
schedule
06.01.2016
От кого-то, кто искал весь день: Спасибо.
- person Tom; 28.06.2018
Это отлично, он обнаружит изменение URL. А не могли бы вы подсказать, как переходить на страницы в SPA без перезагрузки страницы. Я ищу, но не мог получить никакой подсказки. Спасибо
- person Ranjit Singh Shekhawat; 17.09.2020
Я считаю, что вы хотите иметь маршрутизацию пути вместо маршрутизации хэша без перезагрузки страницы. В этом случае вы можете использовать историю API. developer.mozilla.org/en-US/docs/Web/API/ История
- person Srin; 17.09.2020
Как описал mitvenkatesan в своем комментарии к вопросу, этого можно добиться, переопределив событие window.onhashchange() страницы внутри WebView.
Оказывается, это решение уже рассматривалось в другом вопросе.
person
jpetitto
schedule
02.11.2014