2013-02-27 80 views
3

我有一个兼容性问题,在Android'd WebView的特定命名锚点上打开本地存储的页面。目前我使用简单如何滚动到WebView url中的命名锚点?

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

这我4.1设备工作正常,但其他设备的用户一直抱怨没有工作。

例如在4.0.3打开的页面没有url fragment#fragment部分打开罚款,但与它用户得到一个“网页无法”的错误。

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

我还能试试什么?

+0

检查http://stackoverflow.com/questions/3039555/android-webview-anchor-link-jump-link-not-working – Fortega 2013-02-27 15:31:36

+0

@迈克尔你可能想看看这个[元问题](http://meta.stackexchange.com/q/158228/148672) – 2013-02-27 15:42:18

+0

@Fortega,感谢您的链接!奇怪的是,虽然许多其他报告,WebView是简单地忽略片段,在我的情况下,它无法加载页面,如果我添加片段到一个工作的网址! – Czechnology 2013-02-27 15:55:45

回答

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