Skip to content

Instantly share code, notes, and snippets.

@armando-basile
Created November 21, 2019 13:06
Show Gist options
  • Save armando-basile/cdea4d789126007a65e47ff923b5f203 to your computer and use it in GitHub Desktop.
Save armando-basile/cdea4d789126007a65e47ff923b5f203 to your computer and use it in GitHub Desktop.
WebView - JavaScript to Java communication
package application;
import java.net.URL;
import java.util.Date;
import org.w3c.dom.Element;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.concurrent.Worker.State;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class Main extends Application {
private WebView browser = new WebView();
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 400, 400);
URL url = getClass().getResource("Sample.html");
browser.getEngine().load(url.toExternalForm());
root.setCenter(browser);
browser.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
@Override
public void changed(ObservableValue ov, State oldState, State newState) {
if (newState == Worker.State.SUCCEEDED) {
JSObject jsobj = (JSObject) browser.getEngine().executeScript("window");
jsobj.setMember("java", new Bridge());
}
}
});
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public class Bridge {
public void method1() {
System.out.println("test");
Element element = browser.getEngine().getDocument().getElementById("result");
element.setTextContent("clicked..." + new Date().toString());
element.setAttribute("style", "color: red");
String content = browser.getEngine().getDocument().getElementById("table_result").getTextContent();
content += "<tr><td>Table Item...</td></tr>\n";
browser.getEngine().executeScript("updatetable('" + content + "')");
}
}
public static void main(String[] args) {
launch(args);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment