【发布时间】:2015-11-21 04:57:39
【问题描述】:
我有一个大量使用 WebView 的 JavaFX 应用程序。我正在尝试将一个对象插入到 JavaScript 代码可以使用的 DOM 中,并且我需要这些对象在加载新页面时可用。
但是,当我运行程序时,FirebugLite 显示 DOM 中的对象,但函数不执行。
根据some Oracle documentation,这似乎是提供从 JavaScript 到 Java 的向上调用的适当方式。我还看到一些StackOverflow posts 解释了同样的事情。
我错过了什么?我在 Windows 7 上使用 Java 8、Update 51、64 位。
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>
萤火虫截图:
【问题讨论】:
标签: javascript java javafx-8 javafx-webengine