JavaFX WebView : Exécuter une fonction Java via Javascript

Cet exemple vous montre comment appeler une méthode Java via Javascript avec une Web View JavaFX.

La méthode Java sera appelée lorsque le bouton est cliqué dans la Web View.

La méthode setMember() permet de créer un pont entre Java et Javascript

package fr.ronanlefichant.webviewbridge;

import java.io.IOException;

import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;

public class App extends Application {

  /* Démarre l'application JavaFX */
  @Override
  public void start(Stage stage) throws IOException {
    /* Création de la WebView et récupération du moteur web */
    WebView webView = new WebView();
    WebEngine webEngine = webView.getEngine();

    /*
     * Charge le contenu HTML, ici un bouton avec un listener onclick. Le bouton
     * appelle la fonction java sayHello()
     */
    webEngine.loadContent("<button onclick='monObjet.sayHello()'>Dire bonjour</button>");

    /* Ecoute le changement d'état du moteur web */
    webEngine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> {

      /* Quand la page est chargée */
      if (newValue == Worker.State.SUCCEEDED) {

        /* Récupération de l'objet JS Window */
        JSObject window = (JSObject) webEngine.executeScript("window");

        /* Ajoute le membre monObjet avec comme valeur cet objet */
        window.setMember("monObjet", this);
      }

    });

    /* Ajoute la scene et affiche la fenêtre */
    Scene scene = new Scene(webView, 1280, 720);
    stage.setScene(scene);
    stage.show();
  }

  /* La méthode appelée via JavaScript */
  public void sayHello() {
    System.out.println("Bonjour !");
  }

  public static void main(String[] args) {
    /* Démarre l'application JavaFX */
    launch();
  }

}

Commentaires