1

我认为 JxBrowser 6.1 中的 JavaScript Java Bridge API 存在问题。我尝试了一个非常简单的代码来调用 Javascript 中的 java 类的方法。这是代码。在java中,java将javascript对象的属性设置为类window的实例,Events然后加载html。在 html 中,我只是简单地调用类Close的方法Events。但是当我单击按钮时,不会调用Closejava函数,并且来自 JxBrowser 的控制台中有一条消息说:Close

未捕获的类型错误:无法读取未定义的属性“关闭”

这意味着未定义对象的java属性。window

主.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");

    }

}

简单的.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

如果我错了,请纠正我。提前致谢。

4

1 回答 1

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");
于 2016-02-11T16:21:20.393 回答