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