JavaFX WebView Progress 总是从 0.0 到 1.0。 (没有中间值)
JavaFX WebView Progress always goes from 0.0 to 1.0. (No intermediate values)
我目前正在使用 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 上它总是 returns 0.0 和 1.0,而不是任何中间值。
Loading Page: 0.0
Loading Page: 1.0
有什么办法可以解决这个问题?
使用 JavaFXPorts,在移动设备上(Android 和 iOS),WebView
控件不是 JavaFX 内置控件,而是本机控件。例如,在 iOS 上,使用了 UIWebView
控件。顺便说一下,这同样适用于 TextField
和 TextArea
控件。
为了保持与桌面相同的API,使用了一个JavaFX "WebView" control,但它只是一个门面,一个具有相同属性的节点,但没有 webKit。一切都传递给本机控件。
虽然本机层和 Java 层之间存在双向通信,但并非 所有 都已发送,因此没有 1:1 关系本机控件属性和桌面实现的 JavaFX 属性之间。
如果你检查Objective-C中的native implementation是否有iOS,你可以找到一些与加载状态相关的方法,以及原生回调:
- (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);
}
如您所见,没有与加载进度相关的方法,因此您不会获得任何中间值。
我目前正在使用 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 上它总是 returns 0.0 和 1.0,而不是任何中间值。
Loading Page: 0.0
Loading Page: 1.0
有什么办法可以解决这个问题?
使用 JavaFXPorts,在移动设备上(Android 和 iOS),WebView
控件不是 JavaFX 内置控件,而是本机控件。例如,在 iOS 上,使用了 UIWebView
控件。顺便说一下,这同样适用于 TextField
和 TextArea
控件。
为了保持与桌面相同的API,使用了一个JavaFX "WebView" control,但它只是一个门面,一个具有相同属性的节点,但没有 webKit。一切都传递给本机控件。
虽然本机层和 Java 层之间存在双向通信,但并非 所有 都已发送,因此没有 1:1 关系本机控件属性和桌面实现的 JavaFX 属性之间。
如果你检查Objective-C中的native implementation是否有iOS,你可以找到一些与加载状态相关的方法,以及原生回调:
- (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);
}
如您所见,没有与加载进度相关的方法,因此您不会获得任何中间值。