標籤:
轉: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互動