Как прокрутить до названного якоря в 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;
    }
});
Другие вопросы по тегам