我在跟踪这个答案
我设法在Java上从JavaScript上运行简单的犀牛发动机代码。
但是当涉及到D3.js时,例如:
var svg = d3.select("body").append("svg")如您所见,d3首先要求DOM可用。
因此,JSDOM应该是解决方案。
但是JSDOM碰巧依赖于所需
来自RequireJs网站:
r.js文件允许您运行优化器以及运行Node、Rhino或xpcshell中的模块。
然后我的Java Rhino代码如下所示:
FileReader fr1 = new FileReader("lib/r.js");
FileReader fr2 = new FileReader("lib/jsdom.js");
engine.eval(fr1);
engine.eval(fr2);但现在我遇到了这样一个错误:
ReferenceError:未定义“参数”。
然后我找到了这个好听的回答
然后我的代码看起来如下:
cx.evaluateReader(sharedScope, new FileReader("lib/r.js"), "require", 1, null);
cx.evaluateReader(sharedScope, new FileReader("lib/loader.js"), "loader", 1, null);
cx.evaluateReader(sharedScope, new FileReader("lib/jsdom.js"), "loader", 1, null);错误:尚未加载模块名"fs“
这基本上意味着jsdom.js本身引用的是:
var fs = require('fs');
var path = require('path');
var URL = require('url'); 所以,看来我只需要下载所有的。
但是文件系统 -是关于文件系统的。这意味着它依赖于NodeJs 本机实现。这对我尝试将放在普通java &普通js端的上是不好的。
更新:
现在我正在朝这个方向做我的研究:
https://github.com/nodyn/jvm-npm
http://nodyn.io/的问题是:如何将JSDOM加载到Rhino以让D3.js生成SVG?
再一次: Java Rhino -> D3.JS -> JSDOME -> RequireJS -> FS => SVG?
或“:Mozilla Rhino如何使用nodejs "fs“模块?”
我知道我可以使用PhantomJS,但我正在寻找或类似于Java粘性的东西。更轻量级,不涉及外部进程启动。
发布于 2014-07-11 19:53:44
JsDom可能是一个糟糕的选择,因为它依赖于Node和谷歌的V8 JavaScript引擎的众多内部特性。Env.JS应该是一个更好的选择,但是如果它不起作用,那么您可能就不走运了。它可能无法工作,因为它本质上是一个冻结项目,上一次发布是在2010年。您必须在JavaScript中运行节点或幻影,或者使用阿帕奇巴蒂克等基于Java的解决方案生成SVG。
顺便说一下,require在JsDom中并不是require.js,而是一个内置的Node.js函数。
发布于 2015-05-27 22:28:19
另一种方法是使用Domino作为DOM环境。请看这里(http://jazdw.net/content/server-side-svg-generation-using-d3js)以获得详细信息。阅读评论部分也会有帮助。
https://stackoverflow.com/questions/24557308
复制相似问题