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>
网友评论