【问题标题】:JavaFX WebView Progress always goes from 0.0 to 1.0. (No intermediate values)JavaFX WebView 进度总是从 0.0 到 1.0。 (无中间值)
【发布时间】:2018-12-28 12:05:07
【问题描述】:

我目前正在使用 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

有什么方法可以处理吗?

【问题讨论】:

    标签: ios javafx gluon gluon-mobile javafxports


    【解决方案1】:

    使用 JavaFXPorts,在移动设备(Android 和 iOS)上,WebView 控件不是 JavaFX 内置控件,而是本机控件。例如,在 iOS 上,使用了 UIWebView 控件。顺便说一下,TextFieldTextArea 控件也是如此。

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

    虽然本机和 Java 层之间存在双向通信,但并非所有内容都被发送,因此本机控件属性和 JavaFX 属性之间没有 1:1 的关系桌面实现。

    如果你查看 Objective-C for iOS 中的native implementation,你会发现一些与加载状态相关的方法,以及原生回调:

    - (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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2023-03-15
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      相关资源
      最近更新 更多