美文网首页
WebView的那几个事儿

WebView的那几个事儿

作者: 3Q竹林 | 来源:发表于2018-05-24 21:29 被阅读20次
    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

    相关文章

      网友评论

          本文标题:WebView的那几个事儿

          本文链接:https://www.haomeiwen.com/subject/bklwgxtx.html