1. 程式人生 > >關於webview載入網頁,返回後總是重新整理頁面問題解決

關於webview載入網頁,返回後總是重新整理頁面問題解決

最近用webview發現返回上個頁面總是又自動重新整理頁面,我的需求是進入下頁的時候不用快取,而返回上個頁面的時候不要重新整理頁面回到頂部,要保持在原來頁面進入下頁的位置。

首先來了解一下webview載入網頁的幾個模式,即websetting中設定的載入模式。websetting.setCacheMode( int  mode)

LOAD_CACHE_ELSE_NETWORK只要本地有,無論是否過期,或者no-cache,都使用快取中的資料。

LOAD_CACHE_ONLY:只加載快取資料,如果沒有快取資料,就出現載入失敗;

LOAD_DEFAULT:預設載入方式,根據cache-control決定是否從網路上取資料;

LOAD_NO_CACHE不使用快取,只從網路獲取資料;

LOAD_CACHE_NORMAL: API level 17中已經廢棄, 從API level 11開始作用同LOAD_DEFAULT模式

想要返回的時候不重新獲取資料,重新整理頁面就需要設定模式LOAD_CACHE_ELSE_NETWORK,進入下頁時不採用快取資料需要設定模式 LOAD_DEFAULT 或者 LOAD_NO_CACHE,程式碼如下:

public class WebViewActivity extends Activity{

	private WebView mWebView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_webview);
		
		mWebView = (WebView) findViewById(R.id.webview);
		
		initWebView();
		
		mWebView.loadUrl("http://www.baidu.com");
	}

	private void initWebView() {
		WebSettings ws = mWebView.getSettings(); 
		ws.setJavaScriptEnabled(true);
		mWebView.setWebViewClient(new WebViewClient(){
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
				view.loadUrl(url);
				return super.shouldOverrideUrlLoading(view, url);
			}
		});
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode==KeyEvent.KEYCODE_BACK){
			if(mWebView.canGoBack()){
				mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
				mWebView.goBack();
				return true;
			}
		}
		return false;
	}
}

另外記錄幾個websetting常用的幾個設定:

webSettings.setDomStorageEnabled ( boolean );//是否支援持久化儲存,儲存到本地

webSettings.setJavaScriptEnabled ( boolean );//設定支援javascript指令碼

webSettings.setSupportZoom ( boolean ) ;// 設定支援縮放

webSettings.setBuiltInZoomControls ( boolean );//設定是否出現縮放工具

webSettings.setDatabaseEnabled ( boolean );//開啟database storage API 功能

webSettings.setDatabasePath(path);//設定資料庫快取路徑

webSettings.setAppCacheEnabled( boolean );//設定開啟application H5 Caches 功能

webSettings.setAppCachePath(path);//設定application caches 快取目錄

//設定webview自適應螢幕

webSettings.setLayoutAlgorithm ( LayoutAlgorithm.SINGLE_COLUMN );

webSettings.setLoadWithOverviewMode ( true );