android js交互可以传递json对象吗?
webview . loadurl(" JavaScript:"+callback function+"(' "+data+" ')")";这样jsonobject数据就传递给了JSON,因为JSON得到的是一个string对象。
同时,js主动调用android的对象模式,android无法向JSON返回一个jsON对象,所以JS需要做一些转换,比如:
Android代码:
【java】查看plaincopyprint?
WebView mWebView =(WebView)this . findviewbyid(r . id . WebView);
web settings settings = mwebview . get settings();
settings . setjavascript enabled(true);
settings . setpluginsenabled(true);
settings . setallowfileaccess(true);
settings . setcache mode(web settings。LOAD _ NO _ CACHE);
mWebView.setScrollBarStyle(视图。滚动条_内部_覆盖);//不加的话会显示白边。
string URL = " file:///Android _ asset/t . html ";//js代码在t.html卸载。
navigation instance navigation = new navigation instance(this);
mwebview . addjavascriptinterface(导航,“导航”);
NavigationInstance中的代码:
【java】查看plaincopyprint?
@覆盖
公共JSONObject机动信息(){
尝试{
JSON object test = new JSON object();
test.put("毛毛","值");
返回测试;
//返回新的JSONObject(bean。机动信息);
}catch(异常e){
Log.e(标签,“”,e);
}
返回null
}
t.html中的代码:
[javascript]查看plaincopyprint?
函数testAPI(el){
console . log("-testAPI-");
eval("var obj = "+Navigation。get机动信息());
alert(' type of:'+type of(obj));
alert('毛毛:'+obj .毛毛);
alert(' obj:'+obj);
}
如果直接写成导航。getmaneverinfo .毛毛,会提示未定义,因为js得到的只是一个string对象,它不知道毛毛是一个key。
通过eval转换成表达式,就可以调用obj.maomao得到值。
这里看ios,好像人家很支持webview,json对象可以直接通过JSON获取。