Запуск JSDOM в Нашорне
Я хочу сделать d3 диаграммы на сервере. У меня было 3 варианта: Node, Phantom и Nashorn.
Я предпочитаю 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)
}
}
1 ответ
Решение
Я загружаю вилку домино в nashorn для запуска d3. Domino - это реализация DOM на стороне сервера, основанная на dom.js. в Mozilla. Я загрузил его, используя r.js из require.js. Вы можете использовать эту полезную функцию, которая отсутствует в nashorn, чтобы заставить require.js работать.
Вы можете использовать драйвер Chrome Selenium без браузера.
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();
}
}
}