Android与H5交互,向H5注入APP账号密码免登录等。
2018-11-23 本文已影响0人
苏坡坡要吃婆婆酥
image.png
需求类型:Android调用JS代码
- loadUrl()方法 (本文方法)
需求描述:Android端嵌套了3个H5页面,APP登录之后,免去H5登录。
JS代码:
var getUserInfo= function(value){
var username = value["userid"];
var password = value["password"];
alert("username");
alert(username);
alert("password");
alert(password);
$.ajax({
url:"http://bossxie.qianyankeji.net/index.php/index/publics/uplogin.html",
type:"post",
data:{'username':username,'password':password},
success:function(json){
var parsedInfo = $.parseJSON(json);
console.log(parsedInfo);
if(parsedInfo.status == 1){
// layer.msg(parsedInfo.msg);
window.localStorage.userInfo = json;
var boss = $.parseJSON(window.localStorage.userInfo);
console.log("boss");
console.log(boss);
if (parsedInfo.info.type == 1) {
location.href = "firm.html";
} else if(parsedInfo.info.type == 2) {
location.href = "student.html";
} else{
}
}else if(parsedInfo.status == 0){
alert(parsedInfo.msg);
}
}
})
}
Android代码:
try {
//写在WebViewClient的onPageFinished方法里面
//因为JS代码里面的参数类型是JSONObject,所以我下面这么写。具体可根据JS代码里面的类型改变。
JSONObject json = new JSONObject();
json.put("userid", "13112345678");
json.put("password", "111111");
webView.loadUrl("javascript:getUserInfo(" + json + ")");
} catch (JSONException e) {
e.printStackTrace();
}
-------------------------------------------------------------------
//支持App内部javascript交互。这个一定要记得设置。
webView.getSettings().setJavaScriptEnabled(true);
需求类型:JS调用Android代码
- 通过addJavascriptInterface()添加对象印射方法 (本文方法)
需求描述:Android端嵌套了3个H5页面,只要是APP打开的H5就隐藏H5页面里面的标题栏。
JS代码:
var isApp;
if (window.localStorage.getItem('isApp')) {
isApp = (window.localStorage.getItem('isApp') === 'true') ? true : false;
} else {
isApp = window.fromApp ? true : false;
window.localStorage.setItem('isApp', String(isApp));
}
// alert('window.fromApp='+window.fromApp);
// alert('isApp='+isApp);
console.log(isApp ? 'APP环境' : '非APP环境');
Android代码:
//前端判断fromApp这个对象是否为空,我们随便返回不让为空就行
webview.addJavascriptInterface(new Object(), "fromApp");
public class Object {
@JavascriptInterface
// 这个fromApp为属性名
public int fromApp() {
return 1;
}
}