WebView callback from Javascript

I tried to create a simple callback example from Javascript in Java based on the latest example in WebEngine javadoc ( Calling Java from JavaScript). But when I click the link in WebView, the Java method is not called and the page disappears.

public class TestOnClick extends Application { @Override public void start(Stage stage) throws Exception { try { final WebView webView = new WebView(); final WebEngine webEngine = webView.getEngine(); Scene scene = new Scene(webView); stage.setScene(scene); stage.setWidth(1200); stage.setHeight(600); stage.show(); String webPage = "<html>\n" + " <body>\n" + " <a href=\"\" onclick=\"app.onClick()\">Click here</a>\n" + " </body>\n" + "</html>"; System.out.println(webPage); webView.getEngine().loadContent(webPage); JSObject window = (JSObject) webEngine.executeScript("window"); window.setMember("app", new JavaApp()); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } public static class JavaApp { public void onClick() { System.out.println("Clicked"); } } } 

Note. I do not see any exceptions that occur in the WebView when observing the bootloader using webView.getEngine().getLoadWorker().exceptionProperty().addListener(...) .

+5
javafx javafx-2 webview
source share
1 answer

You are trying to access the web browsing DOM before creating it.

Wrap your JavaApp related code with the page loader to achieve your goal:

 webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() { @Override public void changed(ObservableValue<? extends State> ov, State t, State t1) { if (t1 == Worker.State.SUCCEEDED) { JSObject window = (JSObject) webEngine.executeScript("window"); window.setMember("app", new JavaApp()); } } }); 
+6
source share

All Articles