0

私は Rhino を使用context.evaluateString()して、Java 内からいくつかの単純な JavaScript を実行しています。これは、 Embedding Javascript ガイドの教科書です。

String script = // simple logic
Context c = new ContextFactory().enterContext();
ScriptableObject scope = context.initStandardObjects();
Object o = context.evaluateString(scope, script, "myScript", 1, null);
ScriptableObject result = Context.jsToJava(o, ScriptableObject.class);

メインの Rhino ドキュメントがダウンしているように見えるため、これが現在のベスト プラクティスであるかどうかはわかりませんが、これまでのところ機能しています。

作業ディレクトリ内のライブラリを参照できるようにしたいです。Rhino シェルloadがサポートしていることはわかりますが、埋め込みエンジンでは機能しないと思います。

これは可能ですか?それはどこかに文書化されていますか?load('other.js')理想的には、次のようなものを呼び出すだけで、グローバル プロパティとして指定したディレクトリを検索できるようにしたいと考えています。

4

1 に答える 1

0

私はあまり好きではない一種の答えを持っています。特に、過去30分間私を夢中にさせたRhinoのバグであると確信していることが明らかになったからです。

eval("" + Packages.org.apache.commons.io.FileUtils.readFileToString(
  new java.io.File("/the/local/root", "script.js");
));

{ これ"" + ...が私がこのバグを回避する方法です -- eval()Java String(呼び出しから返されたものなどreadFileToString) を手動で JavaScript ネイティブ文字列に強制しなくても、何も起こらないようです。呼び出しは黙って失敗します。}

これは盲目的に任意のファイルを読み取り、それを評価します。もちろん、これはeval()Java 側から実行するときに行うことなので、あまり心配する必要はありません。

とにかく、多くの理由でエレガントではありませんが、機能します。より良い答えを聞きたいです!

于 2012-09-17T15:39:17.137 に答える