WebView的一些問題

近期更新 8/12
一篇很全的文章推薦
http://blog.sina.com.cn/s/blog_61cf99580102vj36.html


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.

webView.setWebViewClient(new WebViewClient() {  
    @Override  
    public boolean shouldOverrideUrlLoading(WebView view, String url) {  
         view.loadUrl(url);  
        return true;  
    }  
});  

嘗試之後都沒有作用。
再繼續查閱,瞭解到可能是與webView的請求方式有關係(post、get)
思路暫時到這裏,先去找找解決方法,回頭再補充這筆記。

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

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

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


5.25
第一個問題和後臺的同事配合解決了。
第二個問題:(騰訊課堂支付

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.startsWith(“http:”) || url.startsWith(“https:”))
{
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}


View緩存,覺得比較好的一篇文章
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。


**

android 中 webview 怎麼用 localStorage?

**

解決方案:

```
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); 

“`

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