2013-02-27 29 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; 
    } 
});