WebView學習的總結————慕課網

pszh發表於2016-04-27

1.簡介


通過一個連結去載入網頁的時候我們通常會使用一個WebView的控制元件,這裡相信都是知道的!!

2.簡單使用

相信webView.loadUrl();大家都很屬性,但是隻用此操作,會使得你的應用是開啟系統的瀏覽器去開啟url的,這時候我們怎麼處理

webView.loadUrl("http://www.downxia.com/downinfo/70636.html#softdown");
webView.setWebViewClient(new WebViewClient(){
			//讓他在自己的activity中開啟網頁,
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return super.shouldOverrideUrlLoading(view, url);
			}

定義一個progressDialog來實現網頁未加在出來時中間顯示載入進度和溫馨提示
webView.setWebViewClient(new MyWebViewClient())
private class MyWebViewClient extends WebViewClient{
@Override
public void onPageStarted(WebView view, String url,Bitmap favicon) {//網頁頁面開始載入的時候
if (progressDialog == null) {
progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setMessage("資料載入中,請稍後。。。");
progressDialog.show();
webView.setEnabled(false);// 當載入網頁的時候將網頁進行隱藏
}
super.onPageStarted(view, url,favicon);
}
@Override
public void onPageFinished(WebView view, String url) {//網頁載入結束的時候
//super.onPageFinished(view, url);
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
webView.setEnabled(true);
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view ,String url){ //網頁載入時的連線的網址
view.loadUrl(url);
return false;
} 
}



網頁重新整理 webView.reload();

3.下載檔案

	webView.setDownloadListener(new DownloadListener() {
	@Override
		public void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype, long contentLength) {
				// 開啟一個執行緒去下載物件
				System.out.println("<<<<<<<<<<<<<<<<"+url);
				if(url.endsWith(".apk")){
					//自己去下載
					new HttpThread(url).start(); 
					//通過系統下載
//					Uri uri =Uri.parse(url);
//					Intent intent = new Intent(Intent.ACTION_VIEW,uri);
//					startActivity(intent);
					
				}
			}
		});

程式碼的註釋很清楚就不說了


4.錯誤處理(網路404等)

webView.setWebViewClient(new WebViewClient(){
			
			//當沒有網路,或者是連線錯誤的時候使用
			@Override
			public void onReceivedError(WebView view, int errorCode,
					String description, String failingUrl) {
				super.onReceivedError(view, errorCode, description, failingUrl);
				view.loadUrl("file:///android_asset/error.html");//引人一個asset下的一個載入錯誤頁面
				//也可是使用自定義的控制元件去顯示
                               //webView.setVisibility(View.GONE);
				//提示控制元件.setVisibility(View.VISIBLE);
			}
		});




5.同步cookie

使用者登入之後,我們通常在客戶端報存使用者的資訊,我們可以把登入的cookie資訊傳給伺服器,讓伺服器做一個表示,避免重新登入。那我們通過客戶端和webView的cookie同步,

並在activity中設定:

6.WebView和js呼叫的混淆問題


我們在打包的時候混淆程式碼,打包完成之後會導致了js的方法呼叫失敗。我們 只要在proguard.cfg資料夾中新增

-keep class com.example.webview.WebHost {  
    public <methods>;  
}  

7.在activity中使用,回退網頁介面使用

//覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        	webView.goBack(); //goBack()表示返回WebView的上一頁面
            return true;
        }
        finish();//結束退出程式
        return false;
    }

//其實也就是改寫了onBackPressed()方法

8.忽略證書

	webView.setWebViewClient(new WebViewClient() {
			 public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
//				handler.cancel(); // Android預設的處理方式
				handler.proceed();  // 接受所有網站的證書
				//handleMessage(Message msg); // 進行其他處理
			 }
		});


demo的連結 http://www.oschina.net/code/snippet_2702417_55745

相關博文連結:

http://m.oschina.net/blog/673030

http://m.oschina.net/blog/673031

相關文章