setOnError
listener only works for error while loading a given document.
One way to solve this is to call a Java method when console.log
is called. You can do this by.
Your FX application
WebEngine engine = mainWebView.getEngine();
engine.load("http://whereever.com");
engine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) {
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("java", new Bridge());
engine.executeScript("console.log = function(message) { java.log(message); }"); // Now where ever console.log is called in your html you will get a log in Java console
}
});
Your Bridge class
public class Bridge {
public void exit() {
Platform.exit();
}
public void log(String text) {
System.out.println(text);
}
}
Your html
<h1>Text Page</h1>
<button onclick="java.log('This is log')">Log</button>
<button onclick="console.log('This produces the same result as above')">Console.log</button>
<button onclick="java.exit()">Exit</button>
Hope this is of some help.