使用Java访问JavaScript对象属性

Access JavaScript object property using Java

本文关键字:对象 属性 JavaScript 访问 Java 使用      更新时间:2023-09-26

这是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"只会导致在引擎上设置属性,而不是在脚本执行期间设置值。