1

Dojo チャートのサーバー側をレンダリングしようとしています。サーバー側のブラウザー エミュレーション用に Rhino と envjs を見つけました。Java impl に埋め込まれた rhino に dojo.js をロードするサンプル プログラムを実行しようとすると、例外がスローされ、

スレッド「メイン」の例外 javax.script.ScriptException: sun.org.mozilla.javascript.EcmaError: ReferenceError: 「場所」が定義されていません。(#15) の 15 行目。

私のコードは次のとおりです。

import javax.script.*;
import java.io.*;

public class Java6RhinoRunner {
  public static void main(String[] args) throws ScriptException {
    new Java6RhinoRunner().load(args[0]);
  }

  private final ScriptEngine engine;

  public Java6RhinoRunner() throws ScriptException {
    ScriptEngineManager factory = new ScriptEngineManager();
    this.engine = factory.getEngineByName("JavaScript");

    this.engine.put("Java6RhinoRunner", this);
    this.engine.eval("function load(filename) { Java6RhinoRunner.load(filename); }");
  }

  public void load(String filename) throws ScriptException {
    try {
      this.engine.eval(new FileReader(filename));
    }
    catch(FileNotFoundException e) {
      throw new RuntimeException("Error loading javascript file: " + filename, e);
    }
  }
}

たくさんのグーグルが行われましたが、すべて無駄でした。この問題を解決するのを手伝ってください

4

1 に答える 1

1

Dojo が Rhino 環境で実行されていることを検出する方法が原因で、コードは失敗します。

Dojo コードは、Rhino のシェル ( ) との互換性のために作成されorg.mozilla.javascript.tools.shell.Main、 によって定義された機能を検索して Rhino を検出しますorg.mozilla.javascript.tools.shell.Global。これらが存在しない場合、Dojo はブラウザー環境で実行されていると想定します。

これらの機能をスクリプト エンジンで定義することにより、これらの機能をエミュレートすることはおそらく可能ですが、試したことはありません。

組み込みの Rhino で Dojo を実行する方法についてブログ記事を書きましたが、 ScriptEngineAPIを使用していません。

于 2013-04-12T12:31:05.070 に答える