Выполнить JavaScript и вернуть ответ (JavaFX/Swing)
Мне нужно запустить функцию javascript из java и сохранить ответ в переменной. Я написал следующий код, но он не работает:
public Object execute(String value) {
SwingUtilities.invokeLater(() -> {
new JFXPanel();
Platform.runLater(() -> {
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
webEngine.setJavaScriptEnabled(true);
Object response = webEngine.executeScript(value);
Platform.exit();
});
});
return response;
}
Я использую "WebView", потому что мой код JavaScript, использует функции, такие как "окно", "документ" и библиотеки, так как "ScriptEngineManage" не работает в моем случае.
Как я могу решить эту проблему? Мой код работает, но "ответ" возвращается до этого executeScript
заканчивается.
1 ответ
Вы никогда не устанавливаете контент для своего WebView. Вам нужно позвонить что-то вроде
browser.getEngine().load(url)
или же
browser.getEngine().loadContent(html)
Вы должны предоставить хотя бы минимальную HTML-страницу, чтобы иметь возможность доступа к объектам JS, таким как окно или документ. И вам нужно подождать, пока состояние WebEngine завершит загрузку, прежде чем обращаться к объектам Javascript.