菜鸟教程小白 发表于 2022-12-13 05:20:12

ios - JavaFX WebView 进度总是从 0.0 到 1.0。 (无中间值)


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

<pre><code>webEngine.getLoadWorker().progressProperty().addListener((a,b,progress) -&gt; System.out.println(&#34;: &#34; +progress.doubleValue()));
</code></pre>

<p>它打印出从 0.0 到 1.0 的加载。 </p>

<pre><code>Loading Page: 0.0
Loading Page: 0.22
Loading Page: 0.38
Loading Page: 0.81
Loading Page: 1.0
</code></pre>

<p>虽然在 iOS 上它总是返回 0.0 和 1.0,而不是任何中间值。</p>

<pre><code>Loading Page: 0.0
Loading Page: 1.0
</code></pre>

<p>有什么方法可以处理吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>使用 JavaFXPorts,在移动设备(Android 和 iOS)上,<code>WebView</code> 控件不是 JavaFX 内置控件,而是 native 控件。例如,在 iOS 上,使用了 <code>UIWebView</code> 控件。顺便说一下,这同样适用于 <code>TextField</code> 和 <code>TextArea</code> 控件。</p>

<p>为了保持与桌面相同的 API,JavaFX "WebView"<a href="https://bitbucket.org/javafxports/8u-dev-rt/src/7bb974e4073cae570e6106deb4afff9b56d96dd5/modules/web/src/ios/java/javafx/scene/web/WebView.java?at=default" rel="noreferrer noopener nofollow">control</a>使用,但它只是一个门面,一个具有相同属性的节点,但没有 webKit。一切都传递给 native 控件。 </p>

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

<p>如果您查看 <a href="https://bitbucket.org/javafxports/8u-dev-rt/src/7bb974e4073cae570e6106deb4afff9b56d96dd5/modules/web/src/ios/native/WebViewImpl.m?at=default" rel="noreferrer noopener nofollow">native implementation</a>在 iOS 的 Objective-C 中,你可以找到一些与加载状态相关的方法,以及原生回调:</p>

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

<p>转到 JavaFX <a href="https://bitbucket.org/javafxports/8u-dev-rt/src/7bb974e4073cae570e6106deb4afff9b56d96dd5/modules/web/src/ios/java/javafx/scene/web/WebView.java?at=default#lines-1084" rel="noreferrer noopener nofollow">control</a> :</p>

<pre><code>// native callbacks
private void notifyLoadStarted() {
    engine.notifyLoadStarted();
}

private void notifyLoadFinished(String loc, String content) {
    engine.notifyLoadFinished(loc, content);
}
</code></pre>

<p>如您所见,没有与加载进度相关的方法,这就是您不会得到任何中间值的原因。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - JavaFX WebView 进度总是从 0.0 到 1.0。 (无中间值),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/53958332/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/53958332/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - JavaFX WebView 进度总是从 0.0 到 1.0。 (无中间值)