2015-09-15 36 views
0

我想知道是否有一種方法來下載webView加載內部html源代碼時從外部鏈接加載的文件。 比如我有一個從外部鏈接圖像加載一個簡單的HTML字符串:android webView訪問臨時文件

<html> 
<body> 
<h2>Some text</h2> 
<img src="http://s22.postimg.org/473fk850x/dejit.jpg" 
</body> 
</html> 

我可以看到什麼是使用監聽器加載:

myWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onLoadResource(WebView view, String url) { 
      Log.d("log", "url is: " + url); 
     } 
    }); 

但我怎麼能得到(下載作爲一個文件)從webView的圖像,我想有一種臨時的圖像先行,然後在webView中加載。我不想從這裏乘鏈接,重新下載它,它的雙TRAFIC ...

請注意,我需要做的是與所有加載的資源像IMG或CSS,使我自己的緩存實現,將在離線模式下工作了 - 如果沒有互聯網連接I'l更換內部一個外部鏈接...

回答

0

您可以覆蓋所有的資源加載web視圖爲

myWebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
       if (/*has internet*/) { 
        WebResourceResponse resultFromInternet = super.shouldInterceptRequest(view, request); 
        // store result to internet 
        return resultFromInternet; 
       } else { 
        // return resource from local cache 
        return new WebResourceResponse(...); 
       } 
      } 
     }); 
+0

的一點是,我想存儲結果 - 只有img,css或js(並非所有源)在我的文件中,但不重複流量,在webview中加載它們並下載m分開。我想從webView中以某種方式採取它們。但你的'resultFromInternet'是所有來源包括HTML – johny

+0

你可以從資源下載獲得mimetype,並保存到本地緩存只有「文本/ CSS」,「圖像/ *」,「文本/ JavaScript」等 – nnesterov

+0

好吧,這種方法就像它在android [鏈接](http://developer.android.com/reference/android/webkit/WebResourceResponse.html#WebResourceResponse(java.lang.String,java.lang.String,java.io.InputStream))中提到在API 21中,並在我的gradle文件中顯示minSdkVersion 17 - targetSdkVersion 22,並且此方法根本沒有運行... – johny