JavaFX:当从webEngine调用load()时,将DOM传递给Javascript
我一直在尝试传递一个我创建的变量,以便您可以指定在JavaFX中加载WebView时连接到哪个服务器。我的应用程序的设置方式是,它基本上是在JavaFX中模拟网页。它创建一个场景,将其设置为舞台,并调用JavaFX:当从webEngine调用load()时,将DOM传递给Javascript,javascript,html,dom,javafx,Javascript,Html,Dom,Javafx,我一直在尝试传递一个我创建的变量,以便您可以指定在JavaFX中加载WebView时连接到哪个服务器。我的应用程序的设置方式是,它基本上是在JavaFX中模拟网页。它创建一个场景,将其设置为舞台,并调用show()。将覆盖初始化,并创建表示HTML文件的文件路径的URL。然后在此URL上调用load()。有什么方法可以让Javascript在加载()时从JavaFX了解变量的情况吗 例如: public class MyClass implements Initializable { @FX
show()
。将覆盖初始化,并创建表示HTML文件的文件路径的URL。然后在此URL上调用load()。有什么方法可以让Javascript在加载()时从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() );
}
}
我尝试通过添加“?server=“+server
”在.html之后添加服务器,但JavaFX认为整个字符串就是文件名,无法找到具有该确切名称的文件。在加载时将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);
}
});
}
}
wWeb.getEngine().load(urlContent.toExternalForm()+”?server=“+server)
?还是你已经试过了?我只是试了你的建议,没有运气。应用程序将启动,但将为空。我认为它仍在尝试查找具有该确切名称的文件。如果您尝试将浏览器(而不是JavaFX应用程序)指向完整url(即urlContent.toExternalForm()+“?server=“+server
),您会看到什么?你能发布完整url的值吗?我在firefox中收到一条“找不到文件”的消息。@Sam:这里有什么事件处理程序有用吗?类似于带有“onShownProperty()”的窗口事件
window.addEventListener("load", function(e)
{
//DO STUFF HERE...
//MORE STUFF...
window.status = "done";
});