5

Rhinoを使用してJavaアプリケーションにJavaScriptを埋め込んでいます。Rhino Webサイトの例に従って、ContextのevaluateStringメソッドを呼び出してスクリプトを実行し、実際のスクリプトを文字列として渡します。

利用したい既存のJavaScriptコードがたくさんあります。すべてを巨大な文字列に連結してevaluateStringに渡したくありません。むしろ、evaluateStringに渡すコードからコードを呼び出せるようにコードをロードできるようにしたいと思います(MicrosoftのスクリプトコントロールでAddCodeメソッドが機能するようなものです)。ScriptableObject.putPropertyメソッドを使用して現在変数を追加できるようなコードを追加したいと思います。

これを行う方法はありますか?誰かがコードスニペットまたはドキュメントへのリンクを提供できますか?ありがとう!

4

2 に答える 2

2

ドキュメントから、以前に評価されたオブジェクトへの参照はスコープによって制御されているようです。

Context context = Context.enter();
try {
  ScriptableObject scope = context.initStandardObjects();
  Object out = Context.javaToJS(System.out, scope);
  ScriptableObject.putProperty(scope, "out", out);
  context.evaluateString(scope,
      "function foo() { out.println('Hello, World!'); }", "<1>", 1, null);
  context
      .evaluateString(scope, "function bar() { foo(); }", "<2>", 1, null);
  context.evaluateString(scope, "bar();", "<3>", 1, null);
} finally {
  Context.exit();
}

(Rhino 1.7 リリース 2)


Rhino を直接使用して最新バージョンを入手する人もいますが、Java 6 実装では次のようなスクリプトを評価できます。

ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
engine.eval("function foo() { println('Hello, World!'); }");
engine.eval("function bar() { foo(); }");
engine.eval("bar();");
于 2010-06-19T13:03:09.687 に答える
0

私のコードでは、その必要性 (ユーティリティ スクリプトなど) があり、単純にそれらを巨大な StringBuilder に連結し、それを評価しました (Java 6)。javascript は (Java ラッパー オブジェクトなしで) otherJSScript.someUsefulFunction() を実行できないため、これが唯一の方法です。

于 2010-07-29T09:10:46.330 に答える