Android webview与js交换JSON对象数据示例
程序员文章站
2023-11-27 19:13:58
最近几个项目的测试结果,android无法主动通过调用 webview.loadurl("javascript:"+callbackfunction+"('"+data+"...
最近几个项目的测试结果,android无法主动通过调用
webview.loadurl("javascript:"+callbackfunction+"('"+data+"')"); 这种方式将jsonobject类型的data传给js,因为js那边得到就是一个string的对象。
与此同时,js主动调用android的对象方式,android也无法返回给js一个jsonobject,需要js做一下转换,例如:
android 代码:
webview mwebview = (webview) this.findviewbyid(r.id.webview);
websettings settings = mwebview.getsettings();
settings.setjavascriptenabled(true);
settings.setpluginsenabled(true);
settings.setallowfileaccess(true);
settings.setcachemode(websettings.load_no_cache);
mwebview.setscrollbarstyle(view.scrollbars_inside_overlay);//不加上,会显示白边
string url="file:///android_asset/t.html"; //js代码卸载t.html里
navigationinstance navigation =new navigationinstance(this);
mwebview.addjavascriptinterface(navigation, "navigation");
navigationinstance里的代码:
@override
public jsonobject getmaneuverinfo() {
try{
jsonobject test=new jsonobject();
test.put("maomao", "value");
return test;
//return new jsonobject(bean.maneuverinfo);
}catch(exception e){
log.e(tag, "",e);
}
return null;
}
t.html里的代码:
function testapi(el){
console.log("---------testapi---------");
eval("var obj = "+navigation.getmaneuverinfo());
alert('typeof:'+typeof(obj));
alert('maomao:'+obj.maomao);
alert('obj:'+obj);
}
如果直接写成 navigation.getmaneuverinfo.maomao是会提示undefined,因为js那边只得到了一个string对象而已,它不知道maomao是个key。
通过eval将其转化成表达式就可以调用obj.maomao得到value。
在此ps一下ios,貌似人家支持webview很好,js可以直接获取到json对象.
默认t.html加载会自动执行testapi函数,结果如下:
webview.loadurl("javascript:"+callbackfunction+"('"+data+"')"); 这种方式将jsonobject类型的data传给js,因为js那边得到就是一个string的对象。
与此同时,js主动调用android的对象方式,android也无法返回给js一个jsonobject,需要js做一下转换,例如:
android 代码:
复制代码 代码如下:
webview mwebview = (webview) this.findviewbyid(r.id.webview);
websettings settings = mwebview.getsettings();
settings.setjavascriptenabled(true);
settings.setpluginsenabled(true);
settings.setallowfileaccess(true);
settings.setcachemode(websettings.load_no_cache);
mwebview.setscrollbarstyle(view.scrollbars_inside_overlay);//不加上,会显示白边
string url="file:///android_asset/t.html"; //js代码卸载t.html里
navigationinstance navigation =new navigationinstance(this);
mwebview.addjavascriptinterface(navigation, "navigation");
navigationinstance里的代码:
复制代码 代码如下:
@override
public jsonobject getmaneuverinfo() {
try{
jsonobject test=new jsonobject();
test.put("maomao", "value");
return test;
//return new jsonobject(bean.maneuverinfo);
}catch(exception e){
log.e(tag, "",e);
}
return null;
}
t.html里的代码:
复制代码 代码如下:
function testapi(el){
console.log("---------testapi---------");
eval("var obj = "+navigation.getmaneuverinfo());
alert('typeof:'+typeof(obj));
alert('maomao:'+obj.maomao);
alert('obj:'+obj);
}
如果直接写成 navigation.getmaneuverinfo.maomao是会提示undefined,因为js那边只得到了一个string对象而已,它不知道maomao是个key。
通过eval将其转化成表达式就可以调用obj.maomao得到value。
在此ps一下ios,貌似人家支持webview很好,js可以直接获取到json对象.
默认t.html加载会自动执行testapi函数,结果如下:
推荐阅读
-
Android webview与js交换JSON对象数据示例
-
Android开发使用json实现服务器与客户端数据的交互功能示例
-
js与jQuery实现获取table中的数据并拼成json字符串操作示例
-
Android webview与js交换JSON对象数据示例
-
Android webview与js的数据交互
-
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
-
JS对象与json字符串相互转换实现方法示例
-
js与jQuery实现获取table中的数据并拼成json字符串操作示例
-
js 与 php 通过json数据进行通讯示例_javascript技巧
-
Android webview与js的数据交互