關於項目中WebView遇到的問題記錄

WebView其實是一個非常通用的組件,對於初學而言,加載一兩個界面,代碼簡單,也非常容易上手。

但是當商業項目中,需要對加載的網頁做相應的處理,WebView的複雜性就出來了(主要是兩個重寫,WebChromeClient,WebViewClient)。

雖然系統已經封裝了許多的方法,也確實非常實用,如onPageFinished、onPagestarted等等。


現在我碰到一個問題,頁面中的加載需要重定向(該網頁只在特定時間開放48個小時,之後關閉,則重定向至另一個關閉界面),查閱之後,目前覺得應該在shouldOverrideUrlLoading方法中處理。

可是網上的兩個方法:

1.

@Override  
public boolean shouldOverrideUrlLoading (WebView view, String url) {  
     HitTestResult hit = view.getHitTestResult();  
     if (hit != null) {  
                Intent intent = new Intent();  
                intent.setAction( "android.intent.action.VIEW");  
                Uri content_url = Uri. parse(url);  
                intent.setData(content_url);  
                 context.startActivity(intent);  
                 return true;  
     } else {  
           view.loadUrl(url);  
            return true;  
     }  


2.

  1. webView.setWebViewClient(new WebViewClient() {  
  2.     @Override  
  3.     public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  4.          view.loadUrl(url);  
  5.         return true;  
  6.     }  
  7. });  

嘗試之後都沒有作用。

再繼續查閱,瞭解到可能是與webView的請求方式有關係(post、get)

思路暫時到這裏,先去找找解決方法,回頭再補充這筆記。


覺得比較好的相關文章這裏做個鏈接引用,感謝。


http://blog.csdn.net/caesardadi/article/details/8530477   Android WebView使用總結



PS:其實還有一個問題,就是WebView調用騰訊課堂,但是到了支付界面都是失敗,先記錄下來。


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


5.25

第一個問題和後臺的同事配合解決了。

第二個問題,還沒做到,接下來可能要重點解決,(值得注意的是,淘寶不會失敗,騰訊可能才失敗)


PS:

關於WebView緩存,覺得比較好的一篇文章

http://www.open-open.com/lib/view/open1392188052301.html


緩存模式(5種)
LOAD_CACHE_ONLY:  不使用網絡,只讀取本地緩存數據
LOAD_DEFAULT:  根據cache-control決定是否從網絡上取數據。
LOAD_CACHE_NORMAL: API level 17中已經廢棄, 從API level 11開始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用緩存,只從網絡獲取數據.
LOAD_CACHE_ELSE_NETWORK,只要本地有,無論是否過期,或者no-cache,都使用緩存中的數據。
如:www.taobao.com的cache-control爲no-cache,在模式LOAD_DEFAULT下,無論如何都會從網絡上取數據,如果沒有網絡,就會出現錯誤頁面;在LOAD_CACHE_ELSE_NETWORK模式下,無論是否有網絡,只要本地有緩存,都使用緩存。本地沒有緩存時才從網絡上獲取。
www.360.com.cn的cache-control爲max-age=60,在兩種模式下都使用本地緩存數據。


總結:根據以上兩種模式,建議緩存策略爲,判斷是否有網絡,有的話,使用LOAD_DEFAULT,無網絡時,使用LOAD_CACHE_ELSE_NETWORK。



解決方案:

mWebView.getSettings().setDomStorageEnabled(true);   
mWebView.getSettings().setAppCacheMaxSize(1024*1024*8);  
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();  
mWebView.getSettings().setAppCachePath(appCachePath);  
mWebView.getSettings().setAllowFileAccess(true);  

mWebView.getSettings().setAppCacheEnabled(true); 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章