0

我一直在尝试传递我创建的变量,以便您可以在 JavaFX 中加载 WebView 时指定要连接的服务器。我的应用程序的设置方式基本上是在 JavaFX 中模拟网页。它创建一个场景,将其设置为舞台并调用show(). Initialize 被覆盖,并创建一个表示 HTML 文件的文件路径的 URL。然后在此 URL 上调用 load()。有什么方法可以让 Javascript 了解 JavaFX 中的变量load()吗?

例如:

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 应该不难。任何帮助都会很棒。我一直在寻找解决方案一段时间,并阅读了许多 SO 页面,但没有一个解决问题。

4

1 回答 1

1

解决了:

好的男孩和女孩......找到了一种加载页面然后在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";
});
于 2013-07-30T22:49:17.127 回答