Я думаю, что есть проблема с JavaScript Java Bridge API в JxBrowser 6.1. Я пробовал очень простой код для вызова метода класса java в Javascript. Вот коды. В java, java
устанавливается как свойство на javascript window
объект экземпляру класса Events
, а затем загружается html. В html я просто вызываю метод Close
класса Events
. Но когда я нажимаю Close
кнопку, Java Close
функция не будет вызвана, и есть сообщение в консоли от JxBrowser говоря:JxBrowser 6.1 JavaScript Java Bridge API не работает
Uncaught 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
Пожалуйста, исправьте если я ошибаюсь. Спасибо заранее.
Спасибо, я так и сделал, и решить эту проблему, как некоторые, но была еще одна ошибка, говоря: 'Uncaught IllegalAccessException: Класс com.teamdev.jxbrowser.chromium.JSContext не может получить доступ к члену класса RezRem .Events с модификаторами «public» «'. Для этой ошибки я объявил класс 'Events' в другом файле с модификатором' public', и теперь нет проблем. –
JavaScript может иметь доступ только к общедоступным классам и методам. Пожалуйста, отметьте заметки в https: //jxbrowser.support.teamdev.com/solution/articles/9000013062-calling-java-from-javascript – Vladimir
Заметки добавлены недавно, спасибо;) –