java - Dojo 未加载到嵌入 java 的 rhino 中

标签 java dojo rhino

我正在尝试在服务器端渲染 dojo 图表。我遇到了用于服务器端浏览器模拟的 Rhino 和 envjs。当我尝试使用示例程序在嵌入java impl的rhino中加载dojo.js时,抛出异常,

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.EcmaError: ReferenceError: "location" is not defined. (#15) in at line number 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);
    }
  }
}

已经进行了大量的谷歌搜索,但都是徒劳。 请帮我解决这个问题

最佳答案

由于 Dojo 检测到它在 Rhino 环境中运行的方式,代码失败。

Dojo 代码是为了与 Rhino 的 shell (org.mozilla.javascript.tools.shell.Main) 兼容而编写的,并通过查找 org.mozilla.javascript.tools.shell.Global 定义的功能来检测 Rhino。如果这些不存在,Dojo 假定它正在浏览器环境中运行。

可能可以通过在脚本引擎中定义这些功能来模拟这些功能,但我还没有尝试过。

我写了a blog post on running Dojo in embedded Rhino但它不使用 ScriptEngine API。

关于java - Dojo 未加载到嵌入 java 的 rhino 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969392/

相关文章:

java - Tuckey UrlRewrite 中的正则表达式

java - 如何让 Tomcat 接受 URL 中未转义的括号?

javascript - Dojo:在 OnChange 上获取 inlineEditBox 的 ID

javascript - 如何在 "onclick"事件期间加载外部 Javascript 文件?

javascript - Rhino 编译器的编程接口(interface)?

javascript - Rhino 将 java.lang.String 转换为 JavaScript 字符串

java - 我可以创建一次具有最大操作量的循环吗?

java - 并行处理多个 GET 请求

dojo - 使用 AMD 的 dojo 1.7.1 可以在 Aptana 3 中提供代码辅助吗?

javascript - 在 Rhino 中加载当前文件的相对路径上的文件