JavaFX:当从webEngine调用load()时,将DOM传递给Javascript
JavaFX: pass in DOM to Javascript when load() is called from the webEngine
我一直在尝试传递我创建的一个变量,以便在JavaFX中加载WebView时指定要连接到哪个服务器。我的应用程序的设置方式是,它基本上是在模仿JavaFX中的网页。它创建一个Scene,将其设置为Stage并调用show()
。Initialize将被覆盖,并创建一个URL,该URL表示HTML文件的文件路径。然后在此URL上调用load()。有什么方法可以让Javascript在load()
时从JavaFX了解变量吗?
例如:
public class MyClass implements Initializable
{
@FXML
private WebView wWeb;
private String server = "xyz:server";
@Override
public void initialize(URL url, Resource rb)
{
URL urlContent = getClass().getResource("index.html");
wWeb.getEngine().load( urlContent.toExternalForm() );
}
}
我尝试在.html之后添加"?server=" + server
来添加服务器,但JavaFX认为整个String就是文件名,找不到具有该确切名称的文件。在加载时将DOM从Java传递到Javascript应该没有那么困难。任何帮助都会很棒。我一直在寻找解决方案,已经读了很多S.O.的页面,但都没有解决这个问题。
已解决:
好吧,孩子们。。。找到了一种加载页面然后在Javascript中设置变量的方法。解锁的关键是在Javascript中加载后将window.status设置为等于某个值,然后在JavaFX中添加一个侦听器来处理状态的更改。当这种状态改变时,我现在可以调用executeScript()
。我不得不在我的Javascript中编写一个名为setServerFromJava()
的函数。我在测试代码中留下来帮助其他人了解发生了什么以及何时发生。
JavaFX:
public class MyClass implements Initializable
{
@FXML
private WebView wWeb;
private String server = "xyz:server";
@Override
public void initialize(URL url, Resource rb)
{
URL urlContent = getClass().getResource("index.html");
wWeb.getEngine().load( urlContent.toExternalForm() );
//I am looking for a change of status so I can inject the DOM
wWeb.getEngine().setOnStatusChanged(new EventHandler<WebEvent<String>>()
{
public void handle(WebEvent<String> status)
{
String s = status.getData();
if(s != null && s.equals( "done" ))
{
// the dom is loaded and ready to go
System.out.println("DID I GET HERE?");
// javascript
wWeb.getEngine().executeScript("setServerFromJava('"+ server + "');");
}
System.out.println(status);
}
});
}
}
Javascript:
window.addEventListener("load", function(e)
{
//DO STUFF HERE...
//MORE STUFF...
window.status = "done";
});
相关文章:
- Windows形成web浏览器控件和Javascript更改的DOM
- 将DOM节点值与字符串Javascript进行比较
- 用于操纵DOM API的Javascript设计模式
- 使用DOM javascript包含文本和图片的按钮
- 使用静态 HTML 或静态 DOM Javascript 设计页面
- DOM Javascript正在删除子节点
- 如何确定是否在父元素的开始或结束存在文本?HTML DOM &JavaScript
- 如何停止DOM javascript事件处理程序
- PHP动态加载的数据在DOM / JavaScript中无法识别
- 通过DOM javascript操作添加HTML ID
- 测试多个变量的条件?Dom Javascript
- 重载页面不改变DOM - Javascript
- building html/php vs DOM/javascript
- 在XUL中使用DOM JavaScript动态创建复选框
- Chrome DOM/JavaScript Reference
- 将元素放置在DOM JavaScript中的特定位置
- 一个很好的DOM/Javascript参考网站
- DOM Javascript:无法在PHP中找到输入
- HTML DOM Javascript not working?
- Documentation for the DOM, JavaScript & CSS