WebView的那几个事儿

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 = " 
"; 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() {
  @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

你可能感兴趣的:(WebView的那几个事儿)