Обновление Javafx WebView только с помощью JavaScriptJavascript

Форум по Javascript
Ответить
Anonymous
 Обновление Javafx WebView только с помощью JavaScript

Сообщение Anonymous »

Я работаю над небольшим побочным проектом в Яве. Поскольку я хотел, чтобы это было просто, и вроде ретро/ностальгическое чувство, я использую Javafx для пользовательского интерфейса. Тем не менее, я думаю, что Javafx - ужасная основа для создания GUI - поэтому я думал, что смогу использовать веб -просмотр и создать свой фронт с базовым HTML и JavaScript. Похоже, что до сих пор все работает нормально (мне удалось позвонить в свои контроллеры Java из JavaScript, нажав кнопки на WebView), однако пользовательский интерфейс не обновляется. Чтобы просто пройтись, я попытался получить некоторые данные в бэкэнд и обновить список на фронте с полученными результатами. Данные извлекаются правильно (так как они напечатаны на консоли из кода Java), но список просто не меняется.
Идеи о том, что может отсутствовать или если моя идея просто не сработает?

Код: Выделить всё

    public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage stage) {
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();

webEngine.setOnError(event -> LOGGER.warning("[Frontend] An error occured on the frontend: " + event.getMessage()));
File htmlFile = new File(getClass().getResource("/html/index.html").getFile());
webEngine.load(htmlFile.toURI().toString());
webEngine.setJavaScriptEnabled(true);

// Wait until WebView is fully loaded before injecting WeaknessController
webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
if (newState == javafx.concurrent.Worker.State.SUCCEEDED) {
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("fileController", FileController.getInstance());
window.setMember("weaknessController", WeaknessController.getInstance());
window.setMember("vulnerabilityController", VulnerabilityController.getInstance());
window.setMember("fileReader", FileReaderUtility.getInstance());

// TODO: remove later - just for debugging purposes
window.setMember("javaConsole", new JSConsoleBridge());
webEngine.executeScript("""
console.log = function(msg) {
javaConsole.log(msg);
};
console.error = function(msg) {
javaConsole.error(msg);
};
""");
}
});

StackPane root = new StackPane(webView);
Scene scene = new Scene(root, 1500, 900);
stage.setScene(scene);
stage.setTitle("Sage UI");
stage.getIcons().add(new Image(getClass().getResourceAsStream("/logos/taskbar_icon.png")));
stage.show();
}
< /code>
function processFile() {
let filePath = window.fileReader.getFilePath();
console.log("Processing file called");

if (filePath) {
const result = JSON.parse(window.fileController.process(filePath));
console.log(result)
displayStatistics(result);
} else {
console.log(filePath);
}
}

function displayStatistics(statistics) {
console.log(statistics);
let statisticsList = document.getElementById("statistics");
statisticsList.innerHTML = "";
statistics.forEach(severity => {
let li = document.createElement("li");
li.textContent = `${severity.key} ${severity.value}`
statisticsList.appendChild(li);
});
}

function fetchAllVulnerabilities() {
const vulnerabilities = JSON.parse(window.fileController.fetchAllVulnerabilities());
updateList(vulnerabilities);
}

function updateList(entities) {
console.log(entities);
let entityList = document.getElementById("list");
entityList.innerHTML = "";
entities.forEach(entity => {
let li = document.createElement("li");
li.textContent = `${entity.name}`;
entityList.appendChild(li);
});
}

function fetchWeakness(id) {
let list = document.getElementById("weaknessList");
const weakness = JSON.parse(window.weaknessController.fetchById(id));
// TODO: implement
}
< /code>






SAGE UI
[*]





SAGE
Dashboard


[list][/list]


[img]../icons/add-document.png[/img]
Select File


Fetch
Choose File

[list]
List Item 1
[*]List Item 2
[*]List Item 3
[*]List Item 4
[*]List Item 5
[*]List Item 7
[/list]

Vulnerabilities




< /code>
PS: calling processFile()
будет распечатать «Файл обработки» с именем ", но не результат после const result = json.parse (window.filecontroller.process (filePath)); получается, хотя.

Подробнее здесь: https://stackoverflow.com/questions/796 ... javascript
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»