Android之WebViewClient與WebChromeClient的區別

一、Android之WebViewClient與WebChromeClient的區別

ANDROID應用開發的時候可能會用到WEBVIEW這個組件,使用過程中可能會接觸到WEBVIEWCLIENT與WEBCHROMECLIENT,那麼這兩個類到底有什麼不同呢?

WebViewClient主要幫助WebView處理各種通知、請求事件的,比如:

  1. onLoadResource
  2. onPageStart
  3. onPageFinish
  4. onReceiveError
  5. onReceivedHttpAuthRequest

WebChromeClient主要輔助WebView處理Javascript的對話框、網站圖標、網站title、加載進度等比如

  1. onCloseWindow(關閉WebView)
  2. onCreateWindow()
  3. onJsAlert (WebView上alert無效,需要定製WebChromeClient處理彈出)
  4. onJsPrompt
  5. onJsConfirm
  6. onProgressChanged
  7. onReceivedIcon
  8. onReceivedTitle

看上去他們有很多不同,實際使用的話,如果你的WebView只是用來處理一些html的頁面內容,只用WebViewClient就行了,如果需要更豐富的處理效果,比如JS、進度條等,就要用到WebChromeClient。

更多的時候,你可以這樣

WebView webView;
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);

這樣你的WebView理論上就能有大部分需要實現的特色了
當然,有些更精彩的內容還是需要你自己添加的

二、WebViewClient的方法說明

1、在點擊請求的是鏈接是纔會調用,重寫此方法返回true表明點擊網頁裏面的鏈接還是在當前的webview裏跳轉,不跳到瀏覽器那邊。

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url);
       return true;
  }

2、重寫此方法可以讓webview處理https請求。

public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();
}

3、重寫此方法才能夠處理在瀏覽器中的按鍵事件。

public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
            return super.shouldOverrideKeyEvent(view, event);
        }
    }

4、 在加載頁面資源時會調用,每一個資源(比如圖片)的加載都會調用一次。

public void onLoadResource(WebView view, String url) {
            // TODO Auto-generated method stub
            if (DEBUG) {
                Log.d(TAG, " onLoadResource ");
            }
            super.onLoadResource(view, url);
        }

5、 在頁面加載開始時調用。

public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            if (DEBUG) {
                Log.d(TAG, " onPageStarted ");
            }
           if (url.endsWith(".apk")) {
                    download(url);//下載處理
             }
            super.onPageStarted(view, url, favicon);
        }

6、在頁面加載結束時調用。

public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            if (DEBUG) {
                Log.d(TAG, " onPageFinished ");
            }
            super.onPageFinished(view, url);
        }

轉自:http://blog.csdn.net/jackyhuangch/article/details/8310033

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