我正在尝试在java应用程序中运行envjs和Rhino来使用D3.js渲染SVG。
到目前为止,我可以使用Rhino评估较小的函数,但是在设置envjs时,问题就开始了。最重要的一点是envjs的唯一教程是关于一个名为env.rhino.js的文件。但我不知道在哪里找到它。
有人可以帮帮我吗?
(是的,谷歌显示了一些结果,但它们并非正式属于Rhino或envjs)
答案 0 :(得分:2)
我知道这个答案很晚。但我想做同样的事情并遇到同样的问题 - 也许这会有助于下一个问题。花了一段时间才弄清楚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>
Ĵ
答案 1 :(得分:1)
首先,下载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结果
(String)cx.evaluateString(scope, "alert('Its WORKING!')", "js", 1, null);
答案 2 :(得分:0)
我确实尝试了这一点,但不能走得太远。我还想在服务器端生成SVG,请求是从java(在我的情况下是Glassfish)发起的。你能做到这一点的唯一方法就是使用jsdom&amp; Node.js的我能够成功地做到这一点。可悲的是,除了Node.js + jsdom之外,似乎没有其他方法可以做到这一点。
一旦你开始工作,如果你试图用SVG生成请求大量加载Node.js,那么潜伏着更大的问题。