JxBrowser 6.1 の JavaScript Java Bridge API に問題があると思います。Javascript で Java クラスのメソッドを呼び出す非常に単純なコードを試しました。ここにコードがあります。Java では、java
javascriptwindow
オブジェクトのプロパティとしてEvents
クラスのインスタンスに設定され、html が読み込まれます。html では、クラスClose
のメソッドを呼び出すだけです。Events
しかし、Close
ボタンをクリックすると、JavaClose
関数が呼び出されず、コンソールに JxBrowser から次のようなメッセージが表示されます。
キャッチされていない TypeError: 未定義のプロパティ 'Close' を読み取ることができません
これは、オブジェクト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
私が間違っている場合は修正してください。前もって感謝します。