Додзе не загружается в носорога, встроенного в Java

Я пытаюсь сделать серверную часть диаграмм додзё. Я наткнулся на Rhino и envjs для эмуляции браузера на стороне сервера. когда я попытался на примере программы загрузить dojo.js в носорога, встроенного в Java-Impl, возникло исключение,

Исключение в потоке "main" javax.script.ScriptException: sun.org.mozilla.javascript.EcmaError: ReferenceError: "location" не определено. (№ 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);
    }
  }
}

Много поисков было сделано, но все напрасно. Пожалуйста, помогите мне решить эту проблему

1 ответ

Решение

Код не выполняется из-за способа, которым Dojo обнаруживает, что работает в среде Rhino.

Код Dojo был написан для совместимости с оболочкой Rhino (org.mozilla.javascript.tools.shell.Main) и обнаруживает Rhino, ища функции, определенные org.mozilla.javascript.tools.shell.Global, Если их нет, Dojo предполагает, что работает в среде браузера.

Вероятно, можно эмулировать эти функции, определив их в вашем скриптовом движке, но я не пробовал.

Я написал пост в блоге о запуске Dojo во встроенном Rhino, но он не использует ScriptEngine API.

Другие вопросы по тегам