WebView を多用する JavaFX アプリケーションがあります。JavaScript コードが使用できるオブジェクトを DOM に挿入しようとしていますが、新しいページが読み込まれるときにこれらのオブジェクトを使用できるようにする必要があります。
ただし、プログラムを実行すると、FirebugLite は DOM にオブジェクトを表示しますが、関数は実行されません。
一部の Oracle ドキュメントによると、これは JavaScript から Java へのアップコールを提供する適切な方法のようです。同じことを説明しているStackOverflow の投稿もいくつか見ました。
私は何が欠けていますか?Windows 7 で Java 8、Update 51、64 ビットを使用しています。
ジャワ:
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 スクリーンショット: