Mozilla Rhino が提供する JS スクリプト環境が組み込まれたサードパーティ アプリケーションを使用しています。
残念ながら、これは私が Java ソースにアクセスできないこと、またはこの製品に Rhino を構成/埋め込む手段がないことを意味します。
これを念頭に置いて、私の目標は、JS と JSのみを使用して、グローバル コンテキスト/スコープで任意の量の他のエンコードされた JS を実行することです。これが私がいる場所です(注、この例は多少不自然ですが、我慢してください):
var engine = new Packages.javax.script.ScriptEngineManager().getEngineByName("javascript");
engine = Packages.javax.script.Invocable(engine);
ここが私の居場所です。だから、私はこれを行うことができることを知っています:
engine.eval("var myVar = \"Hello World!\";");
engine.get("myVar");
=> "Hello World!"
しかし、私が望むのは、eval が「現在の」グローバル コンテキスト/スコープ内でエンコードされた文字列を何らかの方法で実行したかのようです。つまり、私はこれを行うことができます:
engine.eval("var myVar = \"Hello World!\";");
myVar
=> "Hello World!"
望ましい動作の別の例:
engine.eval("function sayHello(){ return \"Hello Again!\";}var a = \"Apple\";");
sayHello();
=> "Hello Again!"
a
=> "Apple"
役に立つかもしれないいくつかのオーバーロードされた eval メソッドがあることに注意してください。
class java.lang.Object eval(java.lang.String,javax.script.Bindings)
class java.lang.Object eval(java.lang.String,javax.script.ScriptContext)
しかし、私の拡張実験はまだ成功していません。
どんな考えやアイデアも大歓迎です...