Dojo没有加载到java中的rhino中

Dojo没有加载到java中的rhino中,java,dojo,rhino,Java,Dojo,Rhino,我试图在服务器端呈现dojo图表。我在服务器端浏览器仿真中遇到了Rhino和envjs。当我尝试在java impl中嵌入的rhino中加载dojo.js的示例程序时,抛出了异常 线程“main”javax.script.ScriptException中的异常:sun.org.mozilla.javascript.EcmaError:ReferenceError:“位置”未定义。(#15)在第15行 我的代码如下: import javax.script.*; import java.io.*;

我试图在服务器端呈现dojo图表。我在服务器端浏览器仿真中遇到了Rhino和envjs。当我尝试在java impl中嵌入的rhino中加载dojo.js的示例程序时,抛出了异常

线程“main”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);
    }
  }
}
谷歌已经做了很多搜索,但都是徒劳的。
请帮我解决这个问题

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

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

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


我写了,但它没有使用
ScriptEngine
API。

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

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

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


我写了,但它没有使用
ScriptEngine
API。

你能举个例子吗。我对这些东西比较陌生,您已经有了定义全局范围
load
函数的示例。您需要添加Dojo所依赖的
Global
中的其他特性。您需要阅读Dojo和/或Rhino源代码来确定这些特性是什么。例如,Dojo 1.7.2使用代码
has.add检测Rhino(“host Rhino”,typeof load==“function”&&(typeof Packages==“function”| | typeof Packages==“object”)load
函数的示例。您需要添加Dojo所依赖的
Global
中的其他特性。您需要阅读Dojo和/或Rhino源代码来确定这些特性是什么。例如,Dojo 1.7.2使用代码
has.add检测Rhino(“host Rhino”,typeof load==“function”&&(typeof Packages==“function”| | typeof Packages==“object”)