2012-05-16 113 views
3

我的本機應用程序包含WebView,WebView將Web頁面加載到Web上。例如,HTML從訪問WebView中的本地文件

http://dongshengcn.com/test.html

加載它似乎加載(而不是局部)從網站的任何頁面無法加載從本地設備的任何文件。

我的問題是:

是否有可能加載到網頁視圖(如原生應用程序的一部分)到本地設備訪問文件http://dongsheng.com/test.html

+0

發佈您的代碼並在其中放置文件? –

+0

這可能是一個安全機制。我在一個測試網頁上嘗試了一個file:///mnt/sdcard/some.jpg鏈接,發現它甚至不會在單擊Android設備時嘗試加載。但是,如果我長時間按下鏈接並從彈出式菜單中選擇「打開」,則實際會引用所引用的本地圖像。試用了一個html文件。 –

回答

3

這裏有幾件事情嘗試:

  1. 要使用你需要將它們放在你的項目的資產文件夾,並使用URL,如文件調用它們的本地文件:/// android_asset /。例如,如果您將mypage.html添加到資產文件夾中,則可以使用file:///android_asset/mypage.html在webview中調用它。

  2. 檢查以確保您的Manifest中具有相應的webview權限。對於web視圖正常工作,您需要:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  3. 在Github上,其作爲獎金還修復了幾個錯誤與web視圖在下面的應用程序看看蜂窩和ICS。它是關於如何使用本地文件的網頁視圖一個完整的例子: https://github.com/bricolsoftconsulting/WebViewIssue17535FixDemo

編輯:問題澄清後附錄:

是的,這是可以從網頁加載本地頁面,但您必須使用技巧繞過瀏覽器的安全措施。

替換文件:使用自定義方案的URL // android_asset /部分(例如文件/// android_asset /的mypage.html成爲myscheme:///mypage.html),並在將這些自定義方案的網址您頁。實施WebViewClient的shouldOverrideUrlLoading,檢查URL是否以自定義方案開頭,如果是,則使用webview.loadUrl重定向到本地頁面。

 
    mWebView.setWebViewClient(new WebViewClient() 
    { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      if (url != null && url.startsWith("myscheme://")) 
      { 
       String newUrl = url.replace("myscheme://", "file://android_asset/"); 
       mWebView.loadUrl(newUrl); 
       return true; 
      } 
      return false; 
     } 
    } 
+0

謝謝Theo。我稍微澄清了我的問題。 – dongshengcn

+0

請參閱我上面修改的回覆。 – Theo

+2

爲什麼你需要'... _ LOCATION'用戶權限? –