Ich habe eine JavaFX-Anwendung, die stark von einem WebView Gebrauch macht. Ich versuche, ein Objekt in das DOM einzufügen, das der JavaScript-Code verwenden kann. Diese Objekte müssen verfügbar sein, wenn neue Seiten geladen werden.Warum wird die JavaScript-Methode nicht ausgeführt, wenn sie von JavaFX in das DOM eingefügt wird?
Wenn ich jedoch das Programm ausführen, zeigt FirebugLite das Objekt im DOM, aber die Funktionen werden nicht ausgeführt.
Laut some Oracle documentation scheint dies der geeignete Weg zu sein, Up-Calls von JavaScript zu Java bereitzustellen. Ich habe auch ein paar StackOverflow posts gesehen, die dasselbe erklären.
Was fehlt mir? Ich bin mit Java 8, 51 aktualisieren, 64-Bit-Windows 7.
Java:
public class DemoApplication extends Application {
Debug debug;
@Override
public void start(final Stage stage) throws Exception {
debug = new Debug();
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) {
if (newValue == Worker.State.SUCCEEDED) {
JSObject windowObject = (JSObject) webEngine.executeScript("window");
windowObject.setMember("Debug", debug);
}
}
}
);
webEngine.load("http://localhost:8080/page1.html");
stage.setScene(new Scene(browser));
stage.show();
}
}
public class Debug {
public void print(final Object text) {
System.err.println(text);
}
}
HTML/JavaScript:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
<script>
Debug.print("Hello");
</script>
</head>
<body>
Page 1
<a href="page2.html">Page 2</a>
</body>
</html>
Firebug Screenshot: