Android Webview與Html5互動

來源:互聯網
上載者:User

標籤:

轉:http://fangjie.info/?p=417#more-417

 

一、WebView.setWebViewClient(new MyWebViewClient());

1.public boolean shouldOverrideUrlLoading(WebView view, String url) {        onWebPageShouldLoad(view, url);  //通過       return true;  }

在點擊請求的是連結是才會調用,重寫此方法返回true表明點擊網頁裡面的連結還是在當前的webview裡跳轉,不跳到瀏覽器那邊。

坑爹之處1:Android 2.3.x WebView中的兩個搞笑的bug :http://blog.csdn.net/thestoryoftony/article/details/7844287

解決辦法:將邏輯加在onPageStarted中處理。

2.public void onPageStarted(WebView view, String url, Bitmap favicon) {}

在頁面載入開始時調用。

shouldOverrideUrlLoading與onPageStarted區別:
當點擊頁面中的連結的時候他們倆都會執行,但是返回到上一個頁面的時候onPageStarted會執行,但是shouldOverrideUrlLoading就不執行了,就是onPageStarted什麼時候都執行的

public void onPageFinished(WebView view, String url) {       onWebPageLoaded(view, url); }

在頁面載入結束時調用。

二、WebView.setWebChromeClient(new MyWebChromeClient());

public void onReceivedTitle(WebView view, String title) {//設定Actionbar的Title}public void onProgressChanged(WebView view, int progress) {//設定頁面載入進度}@Overridepublic boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {//彈出框處理(alert,confirm)}

三、WebView.addJavascriptInterface(jsObject, “jsObj”);

  1.先寫一個介面類

public class JsInteface{//分享相關的內容private String mTitle;private String mDes;private String mLink;private String mImgUrl;private String mBigImgUrl;@JavascriptInterfacepublic void setShareContent(String Title,String Des,String Link,String ImgUrl,String BigImgUrl){     mTitle=Title;     mDes=Des;     mLink=Link;     mImgUrl=ImgUrl;     mBigImgUrl=BigImgUrl;     Log.i("OUTPUT", "11title:"+mTitle+"  desc:"+mDes+"   mLink"+mLink+"    mImgUrl"+mImgUrl+"    mBigImgUrl"+mBigImgUrl);}}

2.向webview中注入介面類的對象
WebView.addJavascriptInterface(jsObject, “jsObj”);

3.調用注入對象的js

mWebView.loadUrl("javascript:window.jsObj.setShareContent(document.getElementById(‘app_title‘).innerHTML,"    + "document.getElementById(‘app_desc‘).innerHTML,"    + "document.getElementById(‘app_link‘).innerHTML,"    + "document.getElementById(‘app_img_url‘).src,"    + "document.getElementById(‘app_big_img_url‘).src)");

坑爹之處2:Webview.addJavascriptInterface() does not work on API 17
http://stackoverflow.com/questions/16353430/appview-addjavascriptinterface-does-not-work-on-api-17

解決辦法:在介面方法前加上@JavascriptInterface,並且引入該類,import android.webkit.JavascriptInterface;

四、WebView.setOnKeyListener(new View.OnKeyListener()

  mWebView.setOnKeyListener(new View.OnKeyListener() {              @Override              public boolean onKey(View v, int keyCode, KeyEvent event) {                  if (event.getAction() == KeyEvent.ACTION_DOWN) {                      if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {  //表示按返回鍵                        mWebView.goBack();   //後退                           return true;    //已處理                      }                  }                  return false;              }          });

這段代碼是監聽back按鍵使webview後退一個頁面而不是退出webview,類似於瀏覽器中的後退按鍵。

五、WebView.setDownloadListener(new MyDownloadListener());

這個API可以做下載方面的處理,自己在項目中沒有使用到,這裡就不做解釋了。

public class JsInteface{//分享相關的內容private String mTitle;private String mDes;private String mLink;private String mImgUrl;private String mBigImgUrl;@JavascriptInterfacepublic void setShareContent(String Title,String Des,String Link,String ImgUrl,String BigImgUrl){ mTitle=Title; mDes=Des; mLink=Link; mImgUrl=ImgUrl; mBigImgUrl=BigImgUrl; Log.i("OUTPUT", "11title:"+mTitle+" desc:"+mDes+" mLink"+mLink+" mImgUrl"+mImgUrl+" mBigImgUrl"+mBigImgUrl

Android Webview與Html5互動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.