美文网首页
android webview与网页通信的几种方式

android webview与网页通信的几种方式

作者: 钊神归来 | 来源:发表于2020-08-05 19:30 被阅读0次

    1.android通过setCookie的方式传值

      if (Build.VERSION.SDK_INT >= 21) CookieManager.getInstance().setAcceptThirdPartyCookies(webView,true)        
       CookieManager.getInstance().setCookie("http://10.154.68.164:8081", "token=f7fcf513c1e3803c4e86")
    
    加上这段代码之后,通过抓包工具Charles查看,你会发现"http://10.154.68.164:8081"开头的所有请求的header都会带上Cookie为“token=f7fcf513c1e3803c4e86” 1596100656(1).jpg

    网页端可以通过js代码:

    let cookie = document.cookie
    

    获取cookie的值

    2.webview通过loadUrl传值

    // 调用javascript的callJS()方法

      mWebView.loadUrl("javascript:callJS()");
    

    3.通过WebView的evaluateJavascript()效率更佳

    1.因为该方法的执行不会使页面刷新,而第一种方法(loadUrl )的执行则会。
    2.Android 4.4 后才可使用

    // 只需要将第一种方法的loadUrl()换成下面该方法即可
    mWebView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                //此处为 js 返回的结果
            }
        });
    }
    

    4. JS通过WebView调用 Android 代码

    // 继承自Object类
    public class AndroidtoJs extends Object {
    
        // 定义JS需要调用的方法
        // 被JS调用的方法必须加入@JavascriptInterface注解
        @JavascriptInterface
        public void hello(String msg) {
            Log.i("AndroidtoJs","JS调用了Android的hello方法");
        }
    }
    /**onCreate 方法调用一下代码*/
     webSettings.setJavaScriptEnabled(true);
     // 通过addJavascriptInterface()将Java对象映射到JS对象
     //参数1:Javascript对象名
     //参数2:Java对象名
     mWebView.addJavascriptInterface(new AndroidtoJs(), "test");//AndroidtoJS类对象映射到js的test对象
    

    前端的js代码如下:

    <!DOCTYPE html>
    <html>
       <head>
          <meta charset="utf-8">
          <title>Carson</title>  
          <script>
             function callAndroid(){
            // 由于对象映射,所以调用test对象等于调用Android映射的对象
                test.hello("js调用了android中的hello方法");
             }
          </script>
       </head>
       <body>
          //点击按钮则调用callAndroid函数
          <button type="button" id="button1" onclick="callAndroid()"></button>
       </body>
    </html>
    

    相关文章

      网友评论

          本文标题:android webview与网页通信的几种方式

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