gpt4 book ai didi

ios - JavaFX WebView Progress 总是从 0.0 到 1.0。 (没有中间值)

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:20:30 28 4
gpt4 key购买 nike

我目前正在使用 GluonHQ (JavaFXPorts) 开发一个应用程序,我在其中使用 WebView 加载一些 Internet 页面。我注意到当我在桌面上使用以下代码时

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

有什么办法可以解决这个问题吗?

最佳答案

对于 JavaFXPorts,在移动设备(Android 和 iOS)上,WebView 控件不是 JavaFX 内置控件,而是 native 控件。例如,在 iOS 上,使用 UIWebView 控件。顺便说一句,这同样适用于 TextFieldTextArea 控件。

为了保持与桌面相同的 API,JavaFX“WebView”control被使用,但它只是一个外观,一个具有相同属性但没有 webKit 的节点。一切都传递给 native 控件。

虽然 native 层和 Java 层之间存在双向通信,但并不是所有都被发送,因此 native 控件属性和桌面实现。

如果您检查 native implementation在 iOS 的 Objective-C 中,您可以找到一些与加载状态和 native 回调相关的方法:

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

转到 JavaFX control :

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

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

如您所见,没有与加载进度相关的方法,因此这就是您不会获得任何中间值的原因。

关于ios - JavaFX WebView Progress 总是从 0.0 到 1.0。 (没有中间值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53958332/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com