Android Webview 載入外部html時選擇載入本地的js,css等資原始檔
阿新 • • 發佈:2019-01-07
在使用WebView載入網頁的時候,有一些固定的資原始檔如js的jquery包,css,圖片等資源會比較大,如果直接從網路載入會導致頁面載入的比較慢,而且會消耗比較多的流量。所以這些檔案應該放在assets裡面同app打包。
要解決這個問題需要用到API 11(HONEYCOMB)提供的shouldInterceptRequest(WebView view, String url) 函式來載入本地資源。在API 21又將這個方法棄用了,是過載一個新的shouldInterceptRequest,需要的引數中將url替換成了成了request。
比如有一個圖片icon.png,這個圖片已經放在了assets中,現在載入了一個外部html,就需要直接把assets裡面的圖片拿出來載入而不需要重新從網路獲取。當然可以在html裡面將圖片連結換成file:///android_asset/icon.png,但是這樣這個html就不能在android ,ios,WAP中公用了。
實現程式碼:
webView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { WebResourceResponse response = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ response = super.shouldInterceptRequest(view,url); if (url.contains("icon.png")){ try { response = new WebResourceResponse("image/png","UTF-8",getAssets().open("icon.png")); } catch (IOException e) { e.printStackTrace(); } } } // return super.shouldInterceptRequest(view, url); return response; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { WebResourceResponse response = null; response = super.shouldInterceptRequest(view, request); if (url.contains("icon.png")){ try { response = new WebResourceResponse("image/png","UTF-8",getAssets().open("icon.png")); } catch (IOException e) { e.printStackTrace(); } } return response; } }