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