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中,我只是调用了Eventsclass的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");