![](/img/trans.png)
[英]How to find all the occurrences of a Javascript function using Java and Rhino
[英]How to get values from a Java HashMap in javascript function using Rhino
我正在使用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对象。 scope-脚本对象的object 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'];
这为我工作。 真的,我不知道为什么唐纳德对这个问题投了反对票。 管理员,请注意此问题。
访问复杂对象的数据的唯一方法是使用其接口。 您需要为Android和ios创建单独的解决方案。
typeof
运算符应帮助您在这些情况之间切换。
无需实现NullCallable类的简单解决方案是
new JsonParser(context, scope).parseValue("{\"this is\":\"JSON\"}");
我在Rhino上找到的:从Java内部返回JSON
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.