美文网首页
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