1. 判断WebView是否已经滚动到页面底端:
方法解释:getScrollY()方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.
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中获取的标题为 找不到该网页,因此建议当触发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也执行在主线程。
10. webView 缓存 Cache + HTML5离线功能介绍:
https://blog.csdn.net/moubenmao_jun/article/details/9076917
其他:
WebView与Js交互介绍:https://www.jianshu.com/writer#/notebooks/9538856/notes/21834365/preview
网友评论