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

重要なのは、mozilla internal のbuild_info代わりにjavascript オブジェクトを取得して使用することです。build_info.BUILD_DISPLAY_VERSIONNativeObject

次のコードが出力されます。

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 インスタンスのcontextプロパティまたはbindingsプロパティを確認する必要があります。

jsEngine で「get」を呼び出しても、スクリプトの実行中に設定された値ではなく、エンジンに設定されたプロパティになるだけだと思います。

于 2013-02-25T04:58:32.810 に答える