JavaFX WebView Progress всегда идет от 0,0 до 1,0.(Нет промежуточных значений) - PullRequest
0 голосов
/ 28 декабря 2018

В настоящее время я разрабатываю приложение с GluonHQ (JavaFXPorts), где я использую WebView для загрузки некоторых интернет-страниц.Я заметил, что когда я использую следующий код на рабочем столе

webEngine.getLoadWorker().progressProperty().addListener((a,b,progress) -> System.out.println(": " +progress.doubleValue()));

, он распечатывает загрузку от 0,0 до 1,0.

Loading Page: 0.0
Loading Page: 0.22
Loading Page: 0.38
Loading Page: 0.81
Loading Page: 1.0

Хотя в iOS он всегда возвращает 0.0 и 1.0, а не промежуточные значения.

Loading Page: 0.0
Loading Page: 1.0

Есть ли способ справиться с этим?

1 Ответ

0 голосов
/ 28 декабря 2018

В JavaFXPorts для мобильных устройств (как для Android, так и для iOS) элемент управления WebView является не встроенным элементом управления JavaFX, а встроенным элементом управления.Например, в iOS используется элемент управления UIWebView.Кстати, то же самое относится к элементам управления TextField и TextArea.

Чтобы сохранить тот же API, что и на рабочем столе, используется элемент управления JavaFX "WebView" , но он простофасад, узел с такими же свойствами, но без webKit.Все передано на родной контроль.

И хотя между нативным и Java-уровнями существует связь обоими способами, отправляется не все , поэтому не существует отношения 1: 1 между нативными свойствами элемента управления и свойствами JavaFX.реализации рабочего стола.

Если вы проверите собственную реализацию в Objective-C для iOS, вы можете найти некоторые методы, связанные с состоянием загрузки, и собственные обратные вызовы:

- (void)webViewDidStartLoad:(UIWebView *)webView {
    ...
    (*env)->CallVoidMethod(env, jObject, jmidLoadStarted);
}
- (void)webViewDidFinishLoad:(UIWebView *)wv {
    ...
    (*env)->CallVoidMethod(env, jObject, jmidLoadFinished, jUrl, jInner);
}

, которые переходят к элементу управления JavaFX :

// native callbacks
private void notifyLoadStarted() {
    engine.notifyLoadStarted();
}

private void notifyLoadFinished(String loc, String content) {
    engine.notifyLoadFinished(loc, content);
}

Как видите, не существует метода, связанного с процессом загрузки, поэтому вы выиграли 'получить любое промежуточное значение.

...