JavaFX:当从webEngine调用load()时,将DOM传递给Javascript

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

我一直在尝试传递一个我创建的变量,以便您可以指定在JavaFX中加载WebView时连接到哪个服务器。我的应用程序的设置方式是,它基本上是在JavaFX中模拟网页。它创建一个场景,将其设置为舞台,并调用
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";
});