1. 程式人生 > >載入本地檔案到 WebView 中

載入本地檔案到 WebView 中

 Android 的 WebView 提供了一系列非常靈活的API,可從多種源中載入檔案。但是,由於同源規則限制了可向 web 瀏覽器載入資料的位置,在一些特定的情況下我們不得不重新調整 WebView 的行為。

Ⅰ 載入一個給定 URL 的 res/drawable 本地檔案到WebView 中:

    String html = "<!DOCTYPE html>";
    html += "<head><title>Loading files from res/drawable directory</title></head>";
    html += "<body><img src=\"logo.png\" />/body>";
    html += "</html>";
    WebView.loadDataWithBaseURL("file:///android_res/drawable/", html, "text/html",
    "UTF-8", null);

Ⅱ 載入一個給定 URL 的 SD 卡本地檔案到 WebView 中:

    String base = Environment.getExternalStorageDirectory().getAbsolutePath()
    .toString();
    String imagePath = "file://"+ base + "/logo.png";
    String html = "<!DOCTYPE html>";
    html += "<head><title>Loading files from SDCard</title></head>";
    html += "<body><img src=\""+ imagePath + "\" />/body>";
    html += "</html>";
    WebView.loadDataWithBaseURL("", html, "text/html","UTF-8", null);
注意:
    以上兩個方案只有在 API 2.2及以上才能支援。API 2.2以下一個可選擇的方案是讀取檔案到字串緩衝區。

Ⅲ 通過用 java 讀取檔案內容並把資料傳送到 WebView 的方法把資料載入到 WebView 中:

    // Load an html file
    String html = loadFileFromSDCard("file:///sdcard/oreilly/book/logo.png");
    WebView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null);
或:
    // Load an image file
    String pngData = loadFileFromAssets("file:///android_asset/images/logo.png");
    WebView.loadData(pngData, "image/png", "UTF-8");

Ⅳ 從 res/raw 目錄讀取檔案:
    如果你需要從 res/raw 目錄讀取一個檔案(例如,home.html)並且在 WebView 中顯示,你需要把資源的 ID (例如,R.raw.home)傳遞到你的讀取函式然後把它轉化為字串的形式。

    WebView.loadData(getRawFileFromResource(R.raw.home), "text/html", "UTF-8");
    private String getRawFileFromResource(int resourceId) {
        StringBuilder sb = new StringBuilder();
        Scanner s = new Scanner(getResources().openRawResource(resourceId));
        while (s.hasNextLine()) {
            sb.append(s.nextLine() + "\n");
        }
        return sb.toString();
    }