JxBrowser 6.1 Java脚本 Java 桥 API 不工作
JxBrowser 6.1 JavaScript Java Bridge API is not working
我认为 JxBrowser 6.1 中的 JavaScript Java Bridge API 有问题。我尝试了一个非常简单的代码来调用 Java 脚本中 java class 的方法。这是代码。在 java 中,java
被设置为 javascript window
对象上的 属性 到 Events
class 的实例,然后html 已加载。在html中,我只是调用了Events
class的Close
方法。但是当我单击 Close
按钮时,java Close
函数不会被调用,并且 JxBrowser 的控制台中有一条消息说:
未捕获类型错误:无法读取未定义的 属性'Close'
这意味着 java
属性 for window
object is not defined.
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>
这是我用来做这件事的文章:
https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013062-calling-java-from-javascript
如有错误请指正。
提前致谢。
请确保在访问其 Java 脚本并注册 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");
我认为 JxBrowser 6.1 中的 JavaScript Java Bridge API 有问题。我尝试了一个非常简单的代码来调用 Java 脚本中 java class 的方法。这是代码。在 java 中,java
被设置为 javascript window
对象上的 属性 到 Events
class 的实例,然后html 已加载。在html中,我只是调用了Events
class的Close
方法。但是当我单击 Close
按钮时,java Close
函数不会被调用,并且 JxBrowser 的控制台中有一条消息说:
未捕获类型错误:无法读取未定义的 属性'Close'
这意味着 java
属性 for window
object is not defined.
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>
这是我用来做这件事的文章: https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013062-calling-java-from-javascript
如有错误请指正。 提前致谢。
请确保在访问其 Java 脚本并注册 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");