Это кросс-пост от обсуждения групп Google, которое я начал в теме .
Я провел больше исследований, и мне кажется, я понимаю все, что происходит.
Вот мой WebViewClient
:
public class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
System.out.println("onPageStarted: " + url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
System.out.println("shouldOverrideUrlLoading: " + url);
webView.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView webView, String url) {
System.out.println("onPageFinished: " + url);
}
}
У меня есть следующие перенаправления URL с моего сервера:
http://example.com/resource -> http://example.com/user-name/resource
http://example.com/logout.jsp -> http://example.com/login/logout
http://example.com/login/logout -> http://example.com/login
Эти URL являются частью сервера, который я не контролирую, поэтому мне просто нужно разобраться с поведением.
Вот выход из загрузки http://example.com/resource
onPageStarted: http://example.com/resource
onPageStarted: http://example.com/user-name/resource
shouldOverrideUrlLoading: http://example.com/user-name/resource
onPageFinished: hhttp://example.com/user-name/resource
На данный момент у моего WebView
пустое содержимое. Я должен ждать до второго onPageFinished
, чтобы захватить мой контент.
onPageStarted: http://example.coms/user-name/resource
onPageFinished: http://example.com/user-name/resource
Вот выход из загрузки http://example.com/logout.jsp
onPageStarted: http://example.com/logout.jsp
onPageStarted: http://example.com/login/logout
shouldOverrideUrlLoading: http://example.com/login/logout
onPageFinished: http://example.com/login/logout
onPageStarted: http://example.com/login/logout
onPageStarted: http://example.com/login
shouldOverrideUrlLoading: http://example.com/login
onPageFinished: http://example.com/login
снова, на этом этапе у моего WebView
есть пустая страница. Мне нужно подождать до 3-го onPageFinished
, чтобы получить мой контент с WebView
.
onPageStarted: http://example.com/login
onPageFinished: http://example.com/login
На основании документации я не ожидаю такого поведения. Обратите внимание, что существует несбалансированное число onPageStarted
с и onPageFinished
с. Мне особенно не нравится, как onPageFinished
вызывается с моим перенаправленным URL, но WebView
не содержит моего контента. Я понимаю, что это поведение, вероятно, невозможно изменить, но это неожиданное поведение должно быть, по крайней мере, задокументировано.