1. 判斷WebView是否已經滾動到頁面底端:
方法解釋:getScrollY()方法返回的是當前可見區(qū)域的頂端距整個頁面頂端的距離,也就是當前內容滾動的距離.
getHeight()或者getBottom()方法都返回當前WebView 這個容器的高度
getContentHeight 返回的是整個html 的高度,但并不等同于當前整個頁面的高度,因為WebView 有縮放功能,
所以當前整個頁面的高度實際上應該是原始html 的高度再乘上縮放比例
if(WebView.getContentHeight*WebView.getScale() == (webview.getHeight()+WebView.getScrollY())){
//已經處于底端
}
2. WebView cookies清理:
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().removeSessionCookie();
3. WebView保留縮放功能但隱藏縮放控件:
mWebView.getSettings().setSupportZoom(true);
mWebView.getSettings().setBuiltInZoomControls(true);
if (DeviceUtils.hasHoneycomb())
mWebView.getSettings().setDisplayZoomControls(false);
4. 在WebView加入 flash支持:
String temp = "<html><body bgcolor=\"" + "black"
+ "\"> <br/><embed src=\"" + url + "\" width=\"" + "100%"
+ "\" height=\"" + "90%" + "\" scale=\"" + "noscale"
+ "\" type=\"" + "application/x-shockwave-flash"
+ "\"> </embed></body></html>";
String mimeType = "text/html";
String encoding = "utf-8";
web.loadDataWithBaseURL("null", temp, mimeType, encoding, "");
5. WebView 在Android4.4的手機上onPageFinished() 回調會多調用一次(具體原因待追查)
6. 在無網絡時onReceiveTitle中獲取的標題為 找不到該網頁,因此建議當觸發(fā)onReceiveError時,不要使用獲取到的title.
7. WebView頁面中播放了音頻,退出Activity后音頻仍然在播放問題:
@Override protected void onDestroy() {
rootLayout.removeView(webView);
//或 ((ViewGroup) getWindow()).getDecorView()removeAllViews(); //先從父容器中移除webView:
webView.destroy(); //為防止退出Activity后音頻仍然在播放
super.onDestroy();
}
8. shouldOverrideUrlLoading方法:
shouldOverrideUrlLoading(){
//view.loadUrl(url);//return true時眨八,添加該方法webView中的超鏈接才可以進行二次跳轉訪問
//返回true代表當前應用來處理url铆遭,返回false則代表當前webview來處理url
//(若webview來處理儡遮,在數據獲取失敗時奋岁,與view.loadUrl(url);現象不同的是嚼酝,它不會跳轉到新頁面)
return false;
}
注意事項:
onPageStarted和shouldOverrideUrlLoading 在網頁加載過程中這兩個函數到底哪個先被調用?
當我們通過loadUrl的方式重新加載一個網址時候妄均,這時候會先調用onPageStarted再調用shouldOverrideUrlLoading毙驯,
當我們在打開的這個網址點擊一個link倒堕,這時候會先調用shouldOverrideUrlLoading 再調用onPageStarted,這也就解釋了上邊的現象爆价,
不過shouldOverrideUrlLoading不一定每次都被調用垦巴,只有需要的時候才會被調用媳搪。
9. 調用web端js代碼方法:
//不需要無返回值情況
call = "javascript:sumToJava(1,2)";
call = "javascript:toastMessage(\"" + "content" + "\")";
webView.loadUrl(call);
//需要無返回值情況
webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() {
@Override public void onReceiveValue(String value) {
Log.i(LOGTAG, "onReceiveValue value=" + value);
}});
evaluateJavascript()使用時注意:
1.上面限定了結果返回結果為String,但對于復雜的數據類型骤宣,建議以字符串形式的json返回秦爆。
2.evaluateJavascript方法必須在UI線程(主線程)調用,因此onReceiveValue也執(zhí)行在主線程憔披。
10. webView 緩存 Cache + HTML5離線功能介紹:
https://blog.csdn.net/moubenmao_jun/article/details/9076917
其他:
WebView與Js交互介紹:http://www.reibang.com/writer#/notebooks/9538856/notes/21834365/preview