Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java访问JavaScript对象属性_Java_Javascript_Object_Properties - Fatal编程技术网

使用Java访问JavaScript对象属性

使用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

以下是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\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));
    }
}