WebViewClient與WebChromeClient 區別,setwebchromeclient

來源:互聯網
上載者:User

WebViewClient與WebChromeClient 區別,setwebchromeclient
android應用開發的時候可能會用到webview這個組件,使用過程中可能會接觸到WebViewClient與WebChromeClient,那麼這兩個類到底有什麼不同呢?

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

onLoadResource,onPageStart,onPageFinish,onReceiveError,onReceivedHttpAuthRequest 等。

webview1.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){//Handle the errorToast.makeText(getApplicationContext(), "網路連接失敗 ,請串連網路。", Toast.LENGTH_SHORT).show();}; } }); webview1.getSettings().setDefaultTextEncodingName("UTF-8"); webview1.loadUrl("");


WebChromeClient主要輔助WebView處理Javascript的對話方塊、網站表徵圖、網站title、載入進度等,比如:

onCloseWindow(關閉WebView),onCreateWindow(),onJsAlert (WebView上alert無效,需要定製WebChromeClient處理彈出),onJsPrompt,onJsConfirm,onProgressChanged,onReceivedIcon,onReceivedTitle 等等。

//比如可以添加進度條,使得介面更友好webview1.setWebChromeClient(new WebChromeClient() {    public void onProgressChanged(WebView view, int progress) {         setProgress(progress * 100); if(progress == 100){         imageView1.setVisibility(View.GONE);         tv1.setVisibility(View.GONE);         pb1.setVisibility(View.GONE); fy1.setVisibility(View.GONE); } } } );


看上去他們有很多不同,實際使用的話,如果你的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怎判斷頁面真正成功載入?協助

你說的三個方法我都有嘗試, 不過現在在用onReceivedError, 不過這個方法是頁面出錯時才調用. 我現在是需要兩種標記, 就是說需要改變標記的狀態, started或者finished方法是在onReceivedError之前執行, 但是如果onReceivedError執行了, 上面兩個方法同樣會再次執行. 這樣標記就無法正確判斷了. 所以想找一個在網頁真正載入完畢,可以正常展示時調用的方法. 還有,如果想提高使用者體驗,添加一個進度條, 或者提示框, 上述的started和finished方法同樣是不能使用的. 因為,它們兩個不管如何都會被調用的. 查看原帖>>
 
Android 開發,為何我調用不了webViewsetWebChromeClient

你這翻譯有點奇葩,直接貼原來的錯誤提示吧
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.