使用Java访问JavaScript对象属性
Access JavaScript object property using Java
这是JS代码:
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_info.build_DISPLAY_VERSION属性?
事先非常感谢。
关键是获取javascript对象build_info
而不是build_info.BUILD_DISPLAY_VERSION
,并使用mozilla内部NativeObject
应打印出以下代码:
BUILD_DISPLAY_VERSION
Build 201302232300
以下是源代码(我尽可能使用Java编写语法,但我正在Groovy下测试(
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));
}
}
参考:这似乎与以下问题有关,尽管对于Groovy来说:如何从Groovy中执行Javascript代码并将结果作为映射获取?
您需要查看jsEngine实例的上下文或绑定属性。
我相信在jsEngine上调用"get"只会导致在引擎上设置属性,而不是在脚本执行期间设置值。
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性