我认为JxBrowser 6.1中的JavaScript Java Bridge API存在问题。我已经尝试了一个非常简单的代码来在Javascript中调用java类的方法。这是代码。在java中,java
被设置为javascript window
对象上的属性到Events
类的实例,然后加载html。在html中,我只需调用Close
类的Events
方法。但是当我单击Close
按钮时,不会调用java Close
函数,并且JxBrowser在控制台中有一条消息说:
未捕获的TypeError:无法读取未定义的属性“关闭”
表示未定义java
对象的window
属性。
Main.java:
public class Main extends Application {
private Browser browser;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Platform.setImplicitExit(false);
browser = new Browser();
JSValue window = browser.executeJavaScriptAndReturnValue("window");
window.asObject().setProperty("java", new Events());
BrowserView browserView = new BrowserView(browser);
StackPane pane = new StackPane();
pane.getChildren().add(browserView);
Scene scene = new Scene(pane, 330, 470);
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.setScene(scene);
primaryStage.show();
browser.loadURL(Main.class.getResource("templates/simple.html").toExternalForm());
}
}
class Events {
public void Close() {
System.out.println("close button clicked");
}
}
simple.html:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<button id="Close">Close</button>
<script>
document.getElementById('Close').onclick = function () {
window.java.Close();
}
</script>
</body>
</html>
如果我错了,请纠正我。 提前谢谢。
答案 0 :(得分:2)
在访问JavaScript并注册Java对象之前,请确保加载所需的网页。例如:
browser.addLoadListener(new LoadAdapter() {
@Override
public void onFinishLoadingFrame(FinishLoadingEvent event) {
if (event.isMainFrame()) {
Browser browser = event.getBrowser();
JSValue value = browser.executeJavaScriptAndReturnValue("window");
value.asObject().setProperty("Account", new Account());
}
}
});
browser.loadURL("form.html");