Как прокрутить до названного якоря в URL WebView?
У меня проблемы с совместимостью при открытии локально сохраненной страницы на определенном именованном якоре в Android'd WebView. В настоящее время я использую просто
webView.loadUrl("file:///android_asset/page.html#fragment");
который отлично работает на моем устройстве 4.1, но пользователи других устройств продолжают жаловаться на то, что он не работает.
Например на 4.0.3 Открытие страницы без фрагмента URL #fragment
часть открывается нормально, но при этом пользователь получает сообщение об ошибке "Веб-страница недоступна".
Я также попытался открыть фрагмент двумя вызовами loadUrl(String)
метод, сначала без потом с фрагментом. Также с помощью JavaScript, чтобы изменить местоположение страницы.
Что еще я могу попробовать?
1 ответ
Прежде всего, RFC 1738 не определяет часть фрагмента URL для file://
схема. Файл URI состоит из file://
, имя хоста и путь - и все.
Таким образом, привязки в файловых URI не должны поддерживаться. Но по какой-то причине Android поддерживает их со времен Jelly Bean. Если вы хотите, чтобы они тоже работали над Ice Cream Sandwich:
private static String BASE_URL = "file:///android_asset/";
mWebView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
try {
if (url.startsWith(BASE_URL) && url.contains("#")) {
url = url.replace(BASE_URL, "");
InputStream is = getAssets().open(url.substring(0, url.indexOf("#")));
return new WebResourceResponse("text/html", "utf-8", is);
}
} catch(IOException e) {
Log.e("DKDK", "shouldInterceptRequest", e);
}
return null;
}
});