将命令注入JavaFX托管的Javascript中?

时间:2015-10-28 01:48:45

标签: javascript java html javafx

我正在构建JavaFX Application以帮助我构建Javascript脚本。从基本的意义上讲,它左侧是原始文本窗格,右侧是HTML窗格,显示通过左窗格提供的整个HTML内容的呈现。我在想如何将JavaScript语句注入HTML中;我想我可以在页面的头部或尾部放置一个WebSocket,只接受传递给exec的文本行。这看起来是否合适,还是有更简单的方法?

1 个答案:

答案 0 :(得分:1)

有一种更简单的方法。 您可以致电executeScript在您的网页浏览engine中运行javascript:

web.getEngine().executeScript( "document.body.textContent = 'FooBar' " );

executeScript函数将返回结果为JSObject,原语和简单对象除外。 通过此访问,您可以获取和设置全局变量,如下所示:

JSObject window = (JSObject) engine.executeScript("window");
window.setMember( "foo", "bar" ); // Set window.foo to 'bar'
window.setMember( "console", new MyConsoleInJava() ); // You can also set Java objects!
  

WebEngine还公开了Java中的一些数据,例如documenthistory,   它们在Java中比在JavaScript中更有效。

如果设置onAlert等属性,您甚至可以运行交互式脚本:

webView.getEngine().setOnAlert( ( event ) -> {
   Alert alert = new Alert( AlertType.INFORMATION );
   alert.setTitle( "Webpage says" );
   alert.setContentText( event.getData() );
   alert.showAndWait();
});
webView.getEngine().executeScript( "alert('Mea')" );