我有一个大量使用 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>
萤火虫截图: