Rhino1.7R4とそのorg.mozilla.javascriptパッケージを使用してソフトウェアを移植し、 javax.scriptパッケージとその ScriptEngine ( Java 6 & 7 のRhino 、Java 8 のNashorn ) を使用する必要があります。
主な問題は、スコープ (バインディング) をスタックすることです。Rhino jar を使用して、次のことを行います。
Scriptable scope ...
Scriptable newScope = javascriptContext.initStandardObjects();
newScope.setParentScope(scope);
そう
- 変数が var なしで定義されている場合、それはグローバル変数 (ルート スコープ) です。
- 変数が var で定義されている場合、それはローカル変数です (現在のスコープ)
- 変数がアクセスまたは変更された場合、その現在のスコープ、親、祖父母、およびグローバル スコープでのエンジン ルックアップ
これは JS 標準の動作です。
javax.script API を使用してsetParentScopeと同じことを行うにはどうすればよいですか?