我正在尝试在 java 应用程序中运行envjs和 Rhino 以使用 D3.js 呈现 SVG。
到目前为止,我可以使用 Rhino 评估较小的函数,但是在设置 envjs 时,问题就开始了。最重要的是,关于 envjs 的唯一教程谈到了一个名为 env.rhino.js 的文件。但我不知道在哪里可以找到它。
有人可以帮帮我吗?
(是的,谷歌显示了一些结果,但它们不是正式属于 Rhino 或 envjs)
我正在尝试在 java 应用程序中运行envjs和 Rhino 以使用 D3.js 呈现 SVG。
到目前为止,我可以使用 Rhino 评估较小的函数,但是在设置 envjs 时,问题就开始了。最重要的是,关于 envjs 的唯一教程谈到了一个名为 env.rhino.js 的文件。但我不知道在哪里可以找到它。
有人可以帮帮我吗?
(是的,谷歌显示了一些结果,但它们不是正式属于 Rhino 或 envjs)
我知道这个答案已经很晚了。但我也想做同样的事情并且遇到了同样的问题——也许这会对下一个问题有所帮助。花了一段时间才弄清楚 env-js 上的数百个 github 分支中的哪一个可以完成这项工作。我发现这种组合适用于一个简单的测试:
git clone https://github.com/thatcher/envjs-site.git
#note the different fork!
wget https://raw.github.com/thatcher/env-js/master/src/dom/sizzle.js
wget http://d3js.org/d3.v3.min.js
java -jar dist/env-js-1.1.jar
load("lib/env.rhino.js");
load("sizzle.js");
load("d3.v3.min.js");
d3.select("body").append("svg").selectAll("line").data([1,2]).enter().append("line").attr("x1", function(d){return d;});
document.innerHTML;
<html><head/><body><line/><line/><svg xmlns="http://www.w3.org/2000/svg"><line x1="1"/><line x1="2"/></svg></body><line/><line/></html>
j
首先,下载env.rhino.js
.
然后,使用这段 Java 代码启动一个 Rhino 实例并加载 Env.js:
import org.mozilla.javascript.Context;
import org.mozilla.javascript.tools.shell.Global;
import org.mozilla.javascript.tools.shell.Main;
Context cx = Context.enter();
Global scope = new Global(cx);
cx.setOptimizationLevel(-1);
cx.setLanguageVersion(Context.VERSION_1_5);
现在您可以加载和运行 JavaScript 文件(使用其绝对文件系统路径)
Main.processFile(cx, scope, ABSOLUTE_PATH_TO_SOME_JAVASCRIPT_FILE);
和/或评估 JavaScript 代码并获得其字符串结果
(String)cx.evaluateString(scope, "alert('Its WORKING!')", "js", 1, null);
我确实尝试过,但不能走得很远。我还想在服务器端生成 SVG,请求是从 java 发起的(在我的例子中是 Glassfish)。你可以做到这一点的唯一方法是使用 jsdom 和 Node.js。我能够成功地做到这一点。可悲的是,除了 Node.js + jsdom 之外,似乎没有其他方法可以做到这一点。
一旦你让它工作,如果你试图用 SVG 生成请求大量加载 Node.js,就会出现更大的问题。