Выполнить 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.

Другие вопросы по тегам