1

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)

しかし、私の拡張実験はまだ成功していません。

どんな考えやアイデアも大歓迎です...

4

0 に答える 0