Android開發之WebView的使用



知識點概述:javascript

1.WebView加載網頁的三種方式:loadUrl() , loadData(), LoadDataWithBaseURL()html

2.瞭解WebSettings, WebViewClient, WebChromeClient相對於WebView的做用java

3.WebView與javascript相互調用(難點)android

知識點詳述:web

1.WebView加載網頁的三種方式: loadUrl() , loadData(), LoadDataWithBaseURL()瀏覽器

loadUrl(String url) 設置當前WebView須要訪問的網址緩存

互聯網用:webView.loadUrl("http://www.baidu.com"); 網絡

注: AndroidManifest.xml中必須使用許可"android.permission.INTERNET"纔可訪問網絡ide

      本地頁面放在assets目錄下用:webView.loadUrl("file:///android_asset/html/XX.html");  (注意前綴 file:///android_asset/...)佈局

      本地頁面也可放在sdcard目錄下:webView.loadUrl(file:///mnt/sdcard/test/test.html");    (注意前綴 file:///mnt/sdcard/...)

    loadData(String data, String mimeType, String encoding),   容易致使亂碼

    loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) 跟loadData相比,優先選擇

http://blog.csdn.net/u011206077/article/details/10142999

http://www.csdn123.com/html/itweb/20131016/169685.htm

data:要加載的網頁內容

mimetype:加載的網頁內容的類型(text/html,image/jpeg)

encoding: 指定編碼(utf-8, gbk)  

2.瞭解WebSettings, WebViewClient, WebChromClient相對於WebView的功能

WebSettings用來設置WebView的一些屬性、狀態等。在建立WebView時,系統有一個默認的設置,咱們能夠經過WebView.getSettings來獲得這個設置:

WebSettings webSettings=mWebView.getSettings();

WebSettings和WebView都在同一個生命週期中存在,當WebView被銷燬後,若是再使用WebSettings則會拋出IllegalStateException異常。

下面是設置WebSettings一些經常使用屬性、狀態的方法:

 setAllowFileAccess   啓用或禁止WebView訪問文件數據

 setBlockNetworkImage  是否顯示網絡圖像

 setBuiltInZoomControls   設置是否支持縮放

 setCacheMode             設置緩存的模式   http://blog.csdn.net/t12x3456/article/details/13745553

 setDefaultFontSize       設置默認的字體大小

 setDefaultTextEncodingName  設置在解碼時使用的默認編碼

 setFixedFontFamily     設置固定使用的字體

  ****setJavaScriptEnabled   設置是否支持Javascript

 setLayoutAlgorithm  設置佈局方式

 setLightTouchEnabled   設置用鼠標激活被選項

      setSupportZoom        設置是否支持變焦

緩存模式分析:

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
如: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。

WebViewClient就是專門輔助WebView處理各類通知、請求等事件的類。能夠經過WebView的setWebViewClient方法來指定一個WebViewClient對象。WebViewClient提供了以下的一些方法,咱們能夠覆蓋這些方法來輔助WebView瀏覽網頁,代碼以下(咱們設置覆蓋shouldOverrideUrlLoading方法,使得當有新鏈接時,使用當前的WebView來顯示):

 public boolean shouldOverrideUrlLoading(WebView view,String url){

 view.loadUrl(url);

 return true;

 }

 onPageFinished網頁加載完畢

 onPageStarted            網頁開始加載

 onReceivedError          報告錯誤信息

 onScaleChanged          WebView發生改變

  shouldOverrideUrlLoading 控制新的鏈接在當前WebView中打開  **************************************

補充:對」Back」按鍵的處理:若是用webview點連接看了不少頁之後,若是不作任何處理,點擊系統「Back」鍵,整個webView進程會調用finish()而結束自身,若是但願瀏覽的網頁回退而不是退出瀏覽器,須要在當前Activity中處理並消費掉該Back事件。

覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法。 

             webview.goBack();   //goBack()表示返回webView的上一頁面

WebChromeClient用來輔助WebView處理Javascript的對話框、網站圖標、網站Title、加載進度等。WebChromeClient中的方法不是不少,其功能以下所示:

下面實現onReceivedTitle方法,用於更改應用程序的Title,代碼以下:

 public void onReceivedTitle(WebView view,String title){

 Activity01.this.setTitle(title);

 super.onReceivedTitle(view,title);

    }

 onJsAlert              處理Javascript中的Alert對話框

 onJsConfirm處理Javascript中的Confirm對話框

 onJsPrompt           處理Javascript中的Prompt對話框

 onProgressChanged    加載進度條改變

 onReceivedIcon       網頁圖標更改

 onReceivedTitle      網頁Title更改

3.WebView(網頁/javascript)與java相互調用

WebView不但能夠運行一段HTML代碼,還有一個重要特色,就是WebView能夠同Javascript互相調用。

經過addJavascriptInterface(Object obj,String interfaceName)方法將一個Java對象綁定到一個Javascript對象中,Javascript對象名就是interfaceName,做用域是Global,這樣即可以擴展Javascript的API,獲取Android的數據。

同時,在Java代碼中也能夠直接調用Javascript方法,這樣就能夠互相調用取得數據了,代碼以下:

WebView.loadUrl("javascript:方法名()");

注意: SDK2.3 OS對js的支持有問題,不起做用

課堂小結:

 一、訪問網絡,必須添加權限:AndroidManifest.xml中必須使用許可"android.permission.INTERNET",不然會出Web page not available錯誤。

    二、設置WebView基本信息:

          若是訪問的頁面中有Javascript,則webview必須設置支持Javascript。

          webview.getSettings().setJavaScriptEnabled(true);  

    三、設置WevView要顯示的網頁:

          互聯網用:webView.loadUrl("http://www.google.com"); 

          本地文件用:webView.loadUrl("file:///android_asset/XX.html");  

Android SDK提供了一個Schema,前綴爲"file:///android_asset/".WebView遇到這樣的Schema,就去當前包中的Assets目錄中

    四、若是但願點擊超連接由本身處理,而不是新開WebView進程中響應該連接。給WebView添加一個事件監聽對象(WebViewClient)      

         並重寫其中的一些方法

                shouldOverrideUrlLoading:對網頁中超連接按鈕的響應。

        當按下某個超鏈接時WebViewClient會調用這個方法,並傳遞參數:按下超連接的url  

    五、若是用webview點連接看了不少頁之後,若是不作任何處理,點擊系統「Back」鍵,整個瀏覽器會調用finish()而結束自身,若是但願瀏覽的網頁回退而不是退出瀏覽器,須要在當前Activity中處理並消費掉該Back事件。

        覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法。

  public boolean onKeyDown(int keyCoder,KeyEvent event){

                        if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){

                  webview.goBack();   //goBack()表示返回webView的上一頁面

                                return true;

                        }

                        return false;

                }

相關文章
相關標籤/搜索