我正在使用Rhino库在android中执行JavaScript函数。我有一个javascript函数,
var exucuteJS = function(controlValues) {
var valueSelected = controlValues['country'];
valueSelected = valueSelected.toUpperCase();
switch (valueSelected) {
case "INDIA":
return "IND_HOME";
case "NEPAL":
return "NEP_HOME";
default:
return "DEF_HOME"
}
}
我正在将Java HashMap对象作为参数传递,例如对函数executeJS的controlValues。问题是Rhino无法使用javascript代码从键中获取值。
var valueSelected = controlValues['country'];
返回值是不确定的。
这条线很好用,
var valueSelected = controlValues.get('country');
但无效的javascript代码。
相同的javascript将在android和iOS中执行。上述行在iOS中不受支持。请提出建议。我正在使用最新版本的Rhino。
最终,我自己找到了答案。
而不是将HashMap发送到javascript函数,需要将其作为JSONObject发送。与普通JSONObject的对象不同,它不是NativeJSON对象形式的对象。
Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable());
犀牛-犀牛的Context对象。作用域-可脚本化的对象controlValueJsonString-等效于HashMap的JSON字符串。(controlValueJsonString = new Gson()。toJson(hashMap);)
NullCallable是从Callable实现的类(来自Rhino的org.mozilla.javascript.Callable的程序包)
此“ nativeJsonObject”应传递给javascript函数。
Object[] params = new Object[] { controlValues };
从JSON对象中,javascript可以将值获取为
var valueSelected = controlValues['country'];
这为我工作。真的,我不知道为什么唐纳德对这个问题投了赞成票。管理员,请注意此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句