3

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

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

这在我的 4.1 设备上运行良好,但其他设备的用户一直抱怨它不工作。

例如在4.0.3打开没有url 片段 #fragment部分的页面可以正常打开,但用户会收到“网页不可用”错误。

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

我还能尝试什么?

4

1 回答 1

2

首先,RFC 1738没有为file://方案指定 URL 片段部分。文件 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;
    }
});
于 2013-09-30T18:27:40.313 回答