Ответ 1
Я могу воспроизвести результаты. Android-система WebView 43.0.2357.121 демонстрирует поведение, которое вы описываете, в то время как версия, на которой я был включен, до ее обновления не делала этого.
> отправил отчет об ошибке, и теперь вам нужно больше тестировать и предупреждать мир.
Спасибо, что указали это!
UPDATE
Вот сообщение в блоге, которое я написал на эту тему. Цитата из этого:
Моя рекомендация на данный момент:
Всегда присоединяйте
WebViewClient
кWebView
Всегда выполняйте
shouldOverrideUrlLoading()
наWebViewClient
Всегда возвращайте
true
, чтобы указать, что вы обрабатываете событиеВсегда делайте то, что должно было делать ваше приложение, независимо от того, загружается ли оно URL-адрес в
WebView
или запуск браузера по URL-адресу (скорее чем возвращениеfalse
и использование поведения запасов)Что-то вроде этого статического внутреннего класса, похоже, выполняет трюк — создать экземпляр и передать его на
setWebViewClient()
на вашемWebView
:
private static class URLHandler extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (shouldKeepInWebView(url)) {
view.loadUrl(url);
}
else {
Intent i=new Intent(Intent.ACTION_VIEW, Uri.parse(url))
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
view.getContext().startActivity(i);
}
return(true);
}
private boolean shouldKeepInWebView(String url) {
return(true); // or false, or use regex, or whatever
}
}
(где вы бы поставили свою бизнес-логику в
shouldKeepInWebView()
на определить, должен ли данный URL-адрес оставаться вWebView
или запустить браузер)