使用Java访问JavaScript对象属性
以下是JS代码:使用Java访问JavaScript对象属性,java,javascript,object,properties,Java,Javascript,Object,Properties,以下是JS代码: var build_info = new Object; build_info.BUILD_DISPLAY_VERSION = "Build 201302232300"; 以下是Java代码: ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine jsEngine = mgr.getEngineByName("JavaScript"); jsEngine.eva
var build_info = new Object;
build_info.BUILD_DISPLAY_VERSION = "Build 201302232300";
以下是Java代码:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
jsEngine.eval(buildInfoJS);
buildInfoObj = jsEngine.get("build_info.BUILD_DISPLAY_VERSION");
但是,buildInfoObj返回为null
如果我使用buildInfoObj=jsEngine.get(“build_info”)代码>我得到一个类sun.org.mozilla.javascript.internal.NativeObject的对象,我知道它是一个受限类
有没有一种简单的方法可以访问我忽略的build\u info.build\u DISPLAY\u VERSION属性
非常感谢。您需要查看jsEngine实例的or属性
我相信在jsEngine上调用“get”只会在引擎上设置属性,而不是在脚本执行期间设置值。关键是获取javascript对象build\u info
而不是build\u info。build\u DISPLAY\u VERSION
并使用mozilla内部NativeObject
应打印以下代码:
BUILD_DISPLAY_VERSION
Build 201302232300
这是源代码(我尽可能使用Java编写了语法,但我正在Groovy下对此进行测试)
参考:
这似乎与以下问题有关,但对于Groovy来说:调用get
将返回在脚本执行期间创建的对象使用sun.org.mozilla.javascript.internal.NativeObject
安全吗?因为它是一个放置在内部
包中的类。
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.SimpleBindings;
import sun.org.mozilla.javascript.internal.NativeObject;
String buildInfoJS = "var build_info = new Object;build_info.BUILD_DISPLAY_VERSION = 'Build 201302232300'";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
jsEngine.eval(buildInfoJS);
Object nativeObject = jsEngine.get("build_info");
if (nativeObject instanceof NativeObject) {
NativeObject nObj = (NativeObject)nativeObject;
for (String key: nObj.getAllIds()) {
System.out.println(key);
System.out.println(nObj.get(key, nObj));
}
}