如何滚动到WebView网址中的命名锚点?

时间:2013-02-27 15:24:31

标签: android android-webview uri-fragment

我在Android'd WebView中的特定命名锚点上打开本地存储的页面时遇到兼容性问题。目前我正在使用

webView.loadUrl("file:///android_asset/page.html#fragment");

在我的4.1设备上工作正常,但其他设备的用户一直在抱怨它不能正常工作。

例如在 4.0.3 上打开没有url fragment #fragment部分的页面打开正常,但是用户获取“网页不可用“错误。

我还尝试用两次调用loadUrl(String)方法打开片段,首先没有片段。还使用JavaScript来更改页面的位置。

我还能尝试什么?

1 个答案:

答案 0 :(得分:2)

首先,RFC 1738未指定file://方案的网址片段部分。文件URI由file://,主机名和路径组成 - 就是这样。

因此,不应支持文件URI 中的锚点。但出于某种原因,自从Jelly Bean以来,Android确实支持它们。如果你想让他们也在冰淇淋三明治上工作:

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;
    }
});