Мой веб-просмотр загружает URL-адрес, который - после завершения загрузки - заменяется на другой URL-адрес.
как я могу поймать новый url. getURL()
всегда возвращает 1-й URL-адрес, а не второй.
Я могу видеть новый URL-адрес, если я использую браузер, но я не могу получить его из веб-представления.
Android, перехват URL перехвата веб-браузера
Ответ 1
Вы можете использовать webClient и реализовать shouldOverrideUrlLoading, чтобы перехватить все URL-адреса перед тем, как WebView загрузит их.
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// Here put your code
Log.d("My Webview", url);
// return true; //Indicates WebView to NOT load the url;
return false; //Allow WebView to load url
}
});
Ответ 2
Использование
getOriginalUrl ()
Он возвращает URL-адрес, который был первоначально запрошен для текущей страницы
getUrl ()
не всегда совпадает с URL-адресом, переданным в WebViewClient.onPageStarted
, потому что, хотя загрузка для этого URL-адреса началась, текущая страница, возможно, не изменилась.
getOriginalUrl ()
получает исходный URL для текущей страницы. Это не всегда совпадает с URL-адресом, переданным в WebViewClient.onPageStarted
, потому что, хотя загрузка для этого URL-адреса началась, текущая страница, возможно, не изменилась. Кроме того, возможно, были перенаправления, в результате чего был запрошен другой URL-адрес.
Ответ 3
В моем случае WebViewClient не показывался, были ли изменения в веб-просмотре, я предположил, что это что-то в сети, которая работает.
Я мог бы получить эту информацию из WebChromeClient с помощью OnProgressChanged, я не знаю, поможет ли это людям в любом случае, но вот код:
webview.webChromeClient = object: WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
if (newProgress == 100) {
Log.d("testing", webview.getOriginalUrl())
Log.d("testing", webview.url)
}
}
}
Таким образом, я мог знать, что загружено и когда закончено.