当前位置: 首页 > 知识库问答 >
问题:

在Nashorn运行jsdom

阎裕
2023-03-14

我想在服务器上呈现d3图表。我有三个选择:节点、幻影和纳肖恩。

我更喜欢Nashorn,因为我的API是Scala Play,我不想管理另一个进程。(部署、加载、排队等)

所以现在我需要让JSDom在Nashorn中工作,这样D3将有一些东西可以渲染。

到目前为止,这是可行的,但我不知道如何添加jsdom

class Application @Inject() (val messagesApi: MessagesApi) extends api.ApiController {

  def test = ApiAction { implicit request =>
    ok("The API is ready")
  }

  def pptx = Action { implicit request =>
    val manager: ScriptEngineManager = new ScriptEngineManager
    val engine: ScriptEngine = manager.getEngineByName("nashorn")
    engine.eval(new FileReader(Play.getFile("/ext/lodash.js")))
    val output = engine.eval("function hello(){return _.join('Hello world nashorn does this thing'.split(' '), '-');} hello();")
    Ok(output.toString)
  }
}

共有2个答案

牟黎昕
2023-03-14

您可以使用无头浏览器和Chrome驱动程序。

public class Test {
    public static void main(String args[]) {
        System.setProperty("webdriver.chrome.driver", "D:\\Program-Files\\chromedriver_win32\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless");

        WebDriver driver = new ChromeDriver(options);
        try {
           // String html_content = "<html><head></head><body><div>Hello World</div></body></html>";
            //driver.get("data:text/html;charset=utf-8," + html_content);
            driver.get("D:\\Projects\\Selenium1\\inputfile.html");
            JavascriptExecutor js = (JavascriptExecutor) driver;
            String html1 = (String) js.executeScript("return document.head.innerHTML;");
            System.out.println(html1);
            String html = (String) js.executeScript("return document.body.innerHTML;");
            System.out.println(html);
        } finally {
            driver.quit();
        }
    }
}
王子明
2023-03-14

我在纳肖恩装了一个多米诺骨牌叉来运行d3。Domino是基于Mozilla的DOM的服务器端DOM实现。js。我使用require的r.js加载了它。js。您可以使用nashorn中缺少的这个现成函数来获取所需的信息。js正在工作。

 类似资料:
  • 在下面的代码中,javascript运行在与主线程不同的单独线程中。该脚本是一个无限循环,因此需要以某种方式终止。怎样 使命感脚本开始运行后,cancel()不起作用。但如果我打电话。cancel()在线程初始化之后,它将终止它(注释掉的行)。

  • 我正在寻找沙盒Java 8的Nashorn javascript引擎。我已经发现了--no-java标志,这很有帮助,但我还发现了以下链接,其中指出需要“在启用SecurityManager的情况下运行”:http://mail.openjdk.java.net/pipermail/nashorn-dev/2013-September/002010.html 我还没有找到留档说明如何与Nashor

  • 问题内容: 在下面的代码中,我使javascript在与主要线程不同的线程中运行。该脚本是一个无限循环,因此需要以某种方式终止。怎么样? 脚本开始运行后,调用.cancel()无效。但是,如果我在线程初始化之后立即调用.cancel(),它将终止它(注释行)。 问题答案: 与Java一样,JavaScript(在Nashorn下)也不会像Java那样在紧密循环中响应中断。该脚本需要轮询中断并自动终

  • 使用Java 8,Nashorn,引入了一个大大改进的javascript引擎,以取代现有的Rhino。 Nashorn提供2到10倍的性能,因为它直接编译内存中的代码并将字节码传递给JVM。 Nashorn使用Java 7中引入的调用动态特性来提高性能。 jjs 对于Nashorn引擎,JAVA 8引入了一个新的命令行工具jjs,用于在控制台执行javascript代码。 解释js文件 在c:\

  • Nashorn 项目的目的是基于 Java 实现一个轻量级高性能的 JavaScript 运行环境。该项目使得 Java 程序员可在 Java 程序中嵌入 JavaScript 代码,通过 JSR-223 和 jrunscript 命令行工具开发 JavaScript 应用。

  • 如何使用Java8 Nashorn安全地执行用户提供的JS代码? 该脚本为一些基于servlet的报告扩展了一些计算。该应用程序有许多不同的(不受信任的)用户。脚本应该只能访问JavaObject和定义的成员返回的那些。默认情况下,脚本可以使用Class.forName()(使用我提供的对象的. getClass())实例化任何类。有没有什么方法可以禁止访问任何我没有明确指定的java类?