gpt4 book ai didi

java - 在 Java 上从 Rhino 启动 jsdom

转载 作者:行者123 更新时间:2023-11-30 11:17:05 25 4
gpt4 key购买 nike

我正在跟进 this answer :

我设法在 Java 上从 Rhino Engine 运行简单的 JavaScript 代码。

但是说到 D3.js ,例如:

var svg = d3.select("body").append("svg")

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

因此,出于这个原因,JSDOM 应该是解决方案。

但是JSDOM恰好依赖于requirejs

来自 RequireJs 网站:

The r.js file allows you to run the optimizer as well as run modules in Node, Rhino or xpcshell.

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

FileReader fr1 = new FileReader("lib/r.js");
FileReader fr2 = new FileReader("lib/jsdom.js");
engine.eval(fr1);
engine.eval(fr2);

但现在我最终会遇到这样的错误:

ReferenceError: "arguments" is not defined.

然后我找到了this nice answer:

然后我的代码看起来像这样:

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);

Error: Module name "fs" has not been loaded yet

这基本上意味着 jsdom.js 本身正在引用:

var fs = require('fs');
var path = require('path');
var URL = require('url');

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

但是 fs - 是关于文件系统的。这意味着它依赖于 NodeJs native 实现。这对我在纯 Java 和纯 JS 方面的尝试不利

更新:

目前我正在研究这个方向:

https://github.com/nodyn/jvm-npm
http://nodyn.io/

问题是:如何将 JSDOM 加载到 Rhino 以让 D3.js 生成我的 SVG?

再次 Java Rhino -> D3.JS -> JSDOME -> RequireJS -> FS => SVG ?

“或”:How Mozilla Rhino can use nodejs "fs" module?

我知道我可以使用 PhantomJS ,但我正在寻找 Java 粘性的东西。更轻量级,不涉及外部进程启动。

最佳答案

JsDom可能是一个糟糕的选择,因为它依赖于 Node 和 Google 的 V8 JavaScript 引擎的许多内部功能。 Env.JS应该是一个更好的选择,但如果它不起作用,那么你可能就不走运了。它可能无法工作,因为它本质上是一个卡住的项目,最后一次发布是在 2010 年。您必须在 Node 中运行您的 JavaScript。或 Phantom ,或使用基于 Java 的解决方案生成 SVG,例如 Apache Batik .

顺便说一句,JsDom 中的 requirerequire.js 不同,而是 a build-in Node.js function .

关于java - 在 Java 上从 Rhino 启动 jsdom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com