• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:20:12 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

有什么方法可以处理吗?



Best Answer-推荐答案


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

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

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

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

- (void)webViewDidStartLoadUIWebView *)webView {
    ...
    (*env)->CallVoidMethod(env, jObject, jmidLoadStarted);
}
- (void)webViewDidFinishLoadUIWebView *)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 进度总是从 0.0 到 1.0。 (无中间值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53958332/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap