3

我正在尝试在 java 应用程序中运行envjs和 Rhino 以使用 D3.js 呈现 SVG。

到目前为止,我可以使用 Rhino 评估较小的函数,但是在设置 envjs 时,问题就开始了。最重要的是,关于 envjs 的唯一教程谈到了一个名为 env.rhino.js 的文件。但我不知道在哪里可以找到它。

有人可以帮帮我吗?

(是的,谷歌显示了一些结果,但它们不是正式属于 Rhino 或 envjs)

4

3 回答 3

3

我知道这个答案已经很晚了。但我也想做同样的事情并且遇到了同样的问题——也许这会对下一个问题有所帮助。花了一段时间才弄清楚 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

于 2013-08-02T11:46:59.530 回答
2

首先,下载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);
于 2013-10-09T12:19:35.250 回答
0

我确实尝试过,但不能走得很远。我还想在服务器端生成 SVG,请求是从 java 发起的(在我的例子中是 Glassfish)。你可以做到这一点的唯一方法是使用 jsdom 和 Node.js。我能够成功地做到这一点。可悲的是,除了 Node.js + jsdom 之外,似乎没有其他方法可以做到这一点。

一旦你让它工作,如果你试图用 SVG 生成请求大量加载 Node.js,就会出现更大的问题。

于 2013-04-12T21:03:46.930 回答