2012-04-10 9 views
0

RhinoScriptEngineで第三者のjavascriptファイルを実行しています。このファイルには、 "this"内のメソッドへの参照が含まれています。すなわちthis.getField。このファイルは、 "this"がjs Windowオブジェクト以外のオブジェクトであることを想定して記述されています。私は、「これは」であるオブジェクトを変更することができますどのように、JavaのScriptEngineの(サイ)を使用してオブジェクトに関数のgetFieldを見つけることができません RhinoScriptEngineを使用して、「これ」というjavascriptキーワードをどのように変更するのですか?

は、[グローバルオブジェクト]

:だから今、私はスクリプトを実行するとき、私はこのエラーを取得していますを参照して?ありがとう!

一般的に、私はscriptEngine.eval(script)のようなものを呼び出すことができます。これは、グローバルな "this"オブジェクトへの参照が存在しない限り素晴らしい結果を出します。私は似たようなことをしたいと思っていますが、どこに "これ"があるのか​​を定義することができます。

+0

ウェブブラウザには、「.call」があり、Rhinoで同じかどうかはわかりません。 –

+1

[この回答](http://stackoverflow.com/a/6709811/1106925)が役に立ちますか? –

+1

[Rhino:スクリプトにJavaオブジェクトを渡す方法、 "this"として参照することができます(http://stackoverflow.com/questions/6709542/rhino-how-to-pass-java-object-to) -script-where-this-be-referenced-as-this) –

答えて

1

私はこの答えは3年以上の後にあるが、誰が見つかった場合は、このページへの道は、次のコードは私のために働いた解決策を探している知っている:

ScriptEngineManager factory = new ScriptEngineManager(); 
ScriptEngine engine = factory.getEngineByName("JavaScript"); //Your Engine Name 
engine.put("this", theObject); 

thisを参照すると、目的のオブジェクトにアクセスします。

+0

私(Java 8)では動作しません。 'engine.eval(" this ");'は常に[object global]を生成します。私はそれができないのではないかと恐れている。 –

関連する問題