2013-02-27 2 views
3

Android'd WebView에서 특정 명명 된 앵커에 로컬로 저장된 페이지를 여는 데 호환성 문제가 있습니다. 현재 단순히 사용하고 있습니다WebView url에서 명명 된 앵커로 스크롤하는 방법은 무엇입니까?

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

내 4.1 장치에서 정상적으로 작동하지만 다른 장치의 사용자는 작동하지 않는다고 계속 불평하고 있습니다. url fragment#fragment 부분없이 페이지를 열기 4.0.3에 예를 들어

잘 열리지 만 그것으로 사용자가 오류는 " 사용할 수 없습니다 웹 페이지"를 가져옵니다.

나는 단편을 사용하지 않고 loadUrl(String) 메서드를 두 번 호출하여 조각을 열어 보았습니다. 또한 JavaScript를 사용하여 페이지의 위치를 ​​변경합니다.

나는 무엇을 더 시도 할 수 있습니까?

+0

체크 http://stackoverflow.com/questions/3039555/android-webview-anchor-link-jump-link-not-working – Fortega

+0

: 당신은 그들이 아이스크림도 샌드위치에 작업 할 경우 이 [메타 질문] (http://meta.stackexchange.com/q/158228/148672)을 확인하고 싶을 수도 있습니다. –

+0

@Fortega, 링크를 제공해 주셔서 감사합니다! 이상한 점은 WebView가 단편을 무시하고 있다는 많은 보고서가 있지만, 제 경우에는 작동하는 URL에 단편을 추가하면 페이지가로드되지 않습니다! – Czechnology

답변

2

우선 RFC 1738file:// 구성표의 URL 단편 부분을 지정하지 않습니다. 파일 URI는 file://, 호스트 이름 및 경로로 구성되며 그게 전부입니다.

따라서 파일 URI에 앵커 인 으로 지원되면 안됩니다. 그러나 웬일인지 안드로이드는 Jelly Bean 이후로 그들을 지원합니다. 의 Michaël 당신 @

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