0

JavaFXでWebViewをロードするときに接続するサーバーを指定できるように、作成した変数を渡そうとしています。私のアプリケーションのセットアップ方法は、基本的に JavaFX で Web ページをエミュレートすることです。Scene を作成し、それを Stage に設定して を呼び出しますshow()。Initialize がオーバーライドされ、HTML ファイルへのファイル パスを表す URL が作成されます。次に、この URL に対して load() が呼び出されます。の時点でJavaFXからの変数についてJavascriptに知らせる方法はあります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 全体がファイル名であると見なし、その正確な名前のファイルを見つけることができません。読み込み時に Java から Javascript に DOM を渡すのは、それほど難しいことではありません。どんな助けでも素晴らしいでしょう。私はしばらくの間解決策を探していて、多くのSOページを読みましたが、問題に対処したものはありません.

4

1 に答える 1

1

解決済み:

OK 男の子と女の子... ページをロードし、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 に答える