2

这是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 属性?

非常感谢您提前。

4

2 回答 2

1

关键是获取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:How to execute Javascript code from groovy and get the results as a map?

于 2013-06-27T03:11:24.973 回答
-1

您将需要查看 jsEngine 实例的contextbindings属性。

我相信在 jsEngine 上调用“get”只会导致在引擎上设置属性而不是在脚本执行期间设置值。

于 2013-02-25T04:58:32.810 回答