我在Android'd WebView中的特定命名锚点上打开本地存储的页面时遇到兼容性问题。目前我正在使用
webView.loadUrl("file:///android_asset/page.html#fragment");
在我的4.1设备上工作正常,但其他设备的用户一直在抱怨它不能正常工作。
例如在 4.0.3 上打开没有url fragment #fragment
部分的页面打开正常,但是用户获取“网页不可用“错误。
我还尝试用两次调用loadUrl(String)
方法打开片段,首先没有片段。还使用JavaScript来更改页面的位置。
我还能尝试什么?
答案 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;
}
});