JxBrowser 6.1 JavaScript Java Bridge API不起作用

时间:2016-02-11 01:41:23

标签: java api bridge jxbrowser

我认为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>

以下是我用过的文章: https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013062-calling-java-from-javascript

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

1 个答案:

答案 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");