載入本地檔案到 WebView 中
阿新 • • 發佈:2019-01-27
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(); }