首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java上从Rhino启动jsdom

在Java上从Rhino启动jsdom
EN

Stack Overflow用户
提问于 2014-07-03 15:06:41
回答 2查看 1.5K关注 0票数 2

我在跟踪这个答案

我设法在Java上从JavaScript上运行简单的犀牛发动机代码。

但是当涉及到D3.js时,例如:

代码语言:javascript
复制
var svg = d3.select("body").append("svg")

如您所见,d3首先要求DOM可用。

因此,JSDOM应该是解决方案。

但是JSDOM碰巧依赖于所需

来自RequireJs网站:

r.js文件允许您运行优化器以及运行Node、Rhino或xpcshell中的模块。

然后我的Java Rhino代码如下所示:

代码语言:javascript
复制
FileReader fr1 = new FileReader("lib/r.js");
FileReader fr2 = new FileReader("lib/jsdom.js");
engine.eval(fr1);
engine.eval(fr2);

但现在我遇到了这样一个错误:

ReferenceError:未定义“参数”。

然后我找到了这个好听的回答

然后我的代码看起来如下:

代码语言:javascript
复制
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本身引用的是:

代码语言:javascript
复制
var fs = require('fs');
var path = require('path');
var URL = require('url'); 

所以,看来我只需要下载所有的。

但是文件系统 -是关于文件系统的。这意味着它依赖于NodeJs 本机实现。这对我尝试将放在普通java &普通js端的上是不好的。

更新:

现在我正在朝这个方向做我的研究:

代码语言:javascript
复制
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粘性的东西。更轻量级,不涉及外部进程启动。

EN

回答 2

Stack Overflow用户

发布于 2014-07-11 19:53:44

JsDom可能是一个糟糕的选择,因为它依赖于Node和谷歌的V8 JavaScript引擎的众多内部特性。Env.JS应该是一个更好的选择,但是如果它不起作用,那么您可能就不走运了。它可能无法工作,因为它本质上是一个冻结项目,上一次发布是在2010年。您必须在JavaScript中运行节点幻影,或者使用阿帕奇巴蒂克等基于Java的解决方案生成SVG。

顺便说一下,require在JsDom中并不是require.js,而是一个内置的Node.js函数

票数 1
EN

Stack Overflow用户

发布于 2015-05-27 22:28:19

另一种方法是使用Domino作为DOM环境。请看这里(http://jazdw.net/content/server-side-svg-generation-using-d3js)以获得详细信息。阅读评论部分也会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24557308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档