javafx webview 无法正确显示 html 页面

2024-01-16

当我测试这个示例程序时,webview 无法正确显示 html 页面。

  1. 第一页(第一个圆圈)显示正确!但 ..
  2. 它应该每 10 秒更改一次页面,但事实并非如此。
  3. 它应该显示图表(当您单击第二个圆圈时),但它没有。
  4. 它应该显示显示图像(当您单击第三个圆圈时),但它没有。

Here is 我的配置: openjdk-17

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>17.0.0.1</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-web</artifactId>
    <version>17.0.0.1</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>17.0.0.1</version>
</dependency>

Code

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebView;
import javafx.stage.StageStyle;

public class Main extends Application {
    @Override
    public void start(final Stage pStage) {
        WebView lWebView = new WebView();

        lWebView.getEngine().setJavaScriptEnabled(true);
        lWebView.getEngine().load("http://it-topics.com/index3.html");
        
        VBox lVBox = new VBox(lWebView);

        pStage.setScene(new Scene(lVBox));
        pStage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

我的总体观点是让 webview 的工作方式与浏览器相同。有办法解决第 2、3 和 4 点吗?


测试环境背景

我进行了一些实验,以确定导致您报告的(至少部分)页面显示问题的原因。

在我的测试中,我使用的是 JavaFX 17.0.0.1,在 MS Surface Book 2 上运行 Eclipse Temurin 17 JDK 和 Windows 10 Pro 操作系统。

您的问题中的示例网页在 Chrome 94 中显示,没有出现您在问题中指出的问题,而在 JavaFX WebView 中则遇到了您在问题中指出的问题。

为了调试该问题,我向 Web 引擎添加了一个控制台侦听器,如最流行的答案所示:

  • 如何让JavaFx WebEngine报告详细的错误? https://stackoverflow.com/questions/15522315/how-to-get-the-javafx-webengine-to-report-errors-in-detail
  • JavaFX 12 中的 WebConsoleListener IllegalAccessError https://stackoverflow.com/questions/57167872/webconsolelistener-illegalaccesserror-in-javafx-12

执行此操作后,我看到控制台记录了以下错误:



Console: [https://cdn.jsdelivr.net/npm/chart.js:13] ReferenceError: Can't find variable: ResizeObserver
  

有关 ResizeObserver 的信息

经过一些研究,我发现 ResizeObserver 实现并不适用于所有浏览器实现。所以我猜它没有在WebView中实现。

来自 Mozilla 的 ResizeObserver 信息

  • https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver

Mozilla 的 ResizeObserver 示例测试页(我不对示例中的奇怪文本消息负责):

  • https://mdn.github.io/dom-examples/resize-observer/resize-observer-text.html https://mdn.github.io/dom-examples/resize-observer/resize-observer-text.html

在 WebView 中从 mozilla 加载示例页面证实了缺乏对 ResizeObserver 支持的问题,附加 WebConsoleListener 时会打印以下错误:



Console: [https://mdn.github.io/dom-examples/resize-observer/resize-observer-text.html:110] Resize observer not supported!
  

如何修复它

您可以通过以下方式将 ResizeObserver 功能添加到 WebView(或其他不支持该功能的浏览器)polyfill https://developer.mozilla.org/en-US/docs/Glossary/Polyfill.

解决这个问题的最佳方法是请求您正在使用的网站的开发人员将 ResizeObserver 的填充程序集成到他们的网站中,以使其能够在更广泛的客户端上使用。

解决该问题的示例 polyfill 是:

  • ResizeObserver 填充 https://www.npmjs.com/package/resize-observer-polyfill.

如果您下载正在使用的网站的源代码,并在其他项目之前将 polyfill JavaScript 导入页面中,那么您在问题中引用的大多数问题都会消失并在 WebView 上按预期工作:

  1. 控制台中不会显示有关 ResizeObserver 的错误。
  2. 显示每 10 秒自动更改一次。
  3. 单击第二个圆圈时会显示图表。
  4. 当您单击第三个圆圈时,会显示一个图像(尽管该图像比我在 Chrome 上看到的图像大并且被裁剪)。

ResizeObserver 的 Polyfill javascript 源代码:

  • https://github.com/que-etc/resize-observer-polyfill/blob/master/dist/ResizeObserver.js https://github.com/que-etc/resize-observer-polyfill/blob/master/dist/ResizeObserver.js

提交 ResizeObserver 支持 JavaFX WebView 的功能请求

如果您愿意,您可以为 JavaFX WebView 提交功能请求,请求调整观察者支持大小。

为此,您可以订阅openjfx-dev 邮件列表 http://mail.openjdk.java.net/mailman/listinfo/openjfx-dev并在那里发布有关此问题的消息,链接回此问题。

或者,提交一份针对 JavaFX 的错误报告 https://wiki.openjdk.java.net/display/OpenJFX/Submitting+a+Bug+Report。如果您这样做,我建议您参考 Mozilla Resize Observer 测试页面和相关文档,而不是原始问题中的测试页面。

测试代码

必须使用以下信息运行:这个答案允许访问内部com.sun.javafx执行 https://stackoverflow.com/questions/57167872/webconsolelistener-illegalaccesserror-in-javafx-12.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.stage.Stage;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebView;
import com.sun.javafx.webkit.WebConsoleListener;

public class WebViewPageLoad extends Application {
    @Override
    public void start(final Stage stage) {
        WebView webView = new WebView();
        WebEngine engine = webView.getEngine();

        engine.getLoadWorker().exceptionProperty().addListener((ov, t, t1) ->
                System.out.println("Received exception: "+t1.getMessage())
        );

        WebConsoleListener.setDefaultListener((webViewReference, message, lineNumber, sourceId) ->
                System.out.println("Console: [" + sourceId + ":" + lineNumber + "] " + message)
        );

// test page from original question:        
        engine.load("http://it-topics.com/index3.html");
// test page for resize observer polyfill (functions as expected).        
//        engine.load("https://que-etc.github.io/resize-observer-polyfill/");
// canonical ResizeObserver test page from mozilla.        
//        engine.load("https://mdn.github.io/dom-examples/resize-observer/resize-observer-text.html");
// referencing a local hacked version of the it-topics.com index3.html.
//        engine.load(WebViewPageLoad.class.getResource("it.html").toExternalForm());

        VBox layout = new VBox(webView);

        stage.setScene(new Scene(layout));
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javafx webview 无法正确显示 html 页面 的相关文章

  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • Xcode UI 测试 - 通过 id 在 Webview 中查找元素

    我们的应用程序是混合的 包含 webview 我正在尝试使用 Xcode UI 测试自动化我们的应用程序 我能够使用以下方法找到网络按钮 let app XCUIApplication app launch let button app s
  • Paypal 支付页面布局在 webview android 中损坏

    我在某些 Android 设备上遇到一个奇怪的问题 我正在 webview 上打开 PayPal 支付页面 但它的布局在某些设备上被破坏 请任何人有任何想法 请提出建议 我被困住了 该截图设备的浏览器为chrome版本34 0 1847 1
  • 为什么禁用阶段可调整大小在 javafx 中不起作用?

    当我尝试setResizable对于我在 javaFX 应用程序中的场景 它不起作用 我仍然可以更改窗口大小 这是我的测试应用程序的代码 Override public void start Stage stage throws Excep
  • 仅当用户开始输入时清除 JavaFX TextField 中的提示文本

    默认行为是当字段获得焦点时 字段中的提示文本将被删除 那是标记在场上的时候 是否可以配置文本字段 以便仅在用户开始输入时删除提示文本 否则 我需要在每个文本字段旁边 上方添加一个标签 以描述其中的值 我知道它有点旧 但我自己也需要它 这仍然
  • UWP Webview 仅触发最后一个请求的 NavigationCompleted 事件

    我有一个 foreach 循环要调用 webView NavigateToLocalStreamUri url index resolver 多次 据我所知 每次导航到特定 URL 时 事件NavigationStarting and Na
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言
  • Android 在显示闪屏时将 url 预加载到 WebView 中

    我有一个带有启动屏幕的应用程序 几秒钟后会打开具有 WebView 的主要活动 问题是 只有这样 主 Activity 才会开始加载 URL 这有时需要几秒钟的时间 双重等待似乎很愚蠢 然而 我预加载 WebView 的尝试不太成功 问题的
  • 对于 loadUrl 上的 javascript getElementById,Android WebView 始终返回 null

    我尝试从 Android 客户端应用程序的 Web 视图中填写表格 我知道它应该如何工作 但 getElementById 总是为我返回 null 我在不同的网站上尝试过 这是我针对 www google com 的示例 MyWebView
  • JavaFX TabPane 禁用按键切换选项卡

    我有一个Tab有一些内容 ScrollBar和别的 The ScrollBar has event handler for keys left and right 但如果我按下这些按钮Tabs被切换 因为TabPane还有一个密钥处理程序
  • 在 WebView 中拦截 POST 请求

    我正在开发一个 Android 应用程序来过滤请求 使用白名单 并使用自定义SSLSocketFactory 为此 我开发了一个自定义的WebViewClient我已经覆盖了shouldInterceptRequest方法 我可以过滤并使用
  • Android - 如何在运行时生成的 HTML 数据中加载外部 javascript 文件?

    我有一个包含 HTML 数据的 WebView 数据是在运行时生成的 我的应用程序的一个主要功能是突出显示该 HTML 数据的某些部分 我用 javascript 尝试过这个 Override public View onCreateVie
  • Android webview 在方向改变时保留表单数据

    改变方向后如何保留webview中的表单数据 我用过onSaveInstanceState 我已经使用恢复了之前的状态restoreState savedInstanceState 这成功地恢复了方向更改之前的先前状态 但没有恢复 web
  • 阻止 Android WebView 尝试在 loadData() 上加载/捕获 CSS 等资源

    背景 这似乎与许多其他问题重复 相信我 事实并非如此 我正在尝试将 html 数据加载到WebView https developer android com reference android webkit WebView html 能够
  • 如何右对齐 Javafx 工具栏中的按钮

    我正在使用 Java FX 场景生成器构建 UI 并且希望工具栏中的按钮浮动到工具栏的右侧 我尝试更改父级 工具栏 和按钮的节点方向 但两者似乎都被忽略 添加一个没有内容的窗格 该窗格始终会增长以适应工具栏中左对齐工具和右对齐工具之间的可用
  • JFrame 中的 JavaFX 菜单

    我想在 JFrame 中使用 JavaFX 菜单 我使用 JFXPanel 嵌入它 并且它在 JFrame 中可见 但是 问题是 菜单项不响应鼠标 我可以单击菜单 但不能单击菜单项 如果我使用键盘选择 MenuItem 并按 Enter 键
  • 将TableView数据显示到另一个窗口中包含JavaFx中的TextField

    我制作了两个 Fxml 文件 一个包含 TextField 另一个包含 TableView 它有它的 Controller 类 我想在执行鼠标单击操作事件时显示从 TableView 到 TextField 的数据 但我们没有得到结果 它显
  • JavaFX 拖放无法正常工作

    我在网格窗格中使用两个 Imageview 进行拖放测试 我的问题是 当我完成拖放并将目标图像视图移动到源图像视图并释放鼠标时 我错误地最终显示了 img2 中的图片 而不是 img1 中的图片 当我注释掉 setOnDragExited
  • 为什么我无法在 WebView (UWP) 中打开外部浏览器中的链接?

    我正在开发一个即将完成的 Web 应用程序 该应用程序有一个本地 Web 应用程序 其中有一些链接 我想在外部浏览器 Edge Chrome 等 中打开它们 我的代码分为 3 部分 1 Windows运行时组件 using System u
  • 如何清除所有WebView存储的信息?

    我有一个 Android 浏览器 我可以选择清除缓存 存储 cookie 等 代码如下所示 webView clearCache true webView clearFormData webView clearHistory webView

随机推荐

  • 如何在Delphi 2010下设置泛型类型的前向声明?

    我遇到了一个似乎非常经典的问题 一个项目和一个集合类 两者都互相引用 需要前向声明 我正在使用 Delphi 2010 更新 5 这适用于非泛型类 但我无法解决泛型类型的 E2086 错误 type Forward declarations
  • 在 Mathematica 中自动生成和

    这是我在实现的过程中遇到的一个设计问题广义分配律 https citeseerx ist psu edu viewdoc summary doi 10 1 1 125 8954 假设需要自动生成如下形式的表达式 source yarosla
  • 为什么在数字化示例中 numpy 比 matlab 慢得多?

    我正在比较性能numpy 与 matlab 对比 在某些情况下 我观 察到 numpy 明显慢一些 索引 数组上的简单操作 如绝对值 乘法 求和等 让我们看一下下面的例子 这个例子有点引人注目 涉及到函数digitize 我计划用它来同步时
  • log4j 日志记录层次结构顺序

    log4j 日志记录的层次结构是什么 DEBUG INFO WARN ERROR FATAL 哪一个提供最高的日志记录 这有助于解决问题 任何人都可以提供从最高到最低进行日志记录的顺序或层次结构吗 谢谢 这张表可能对您有帮助 沿着第一列 您
  • iOS 8 数字转换/格式错误? (无法重现)

    以下方法从 UITextField 获取输入并设置其格式以供显示 该代码多年来一直完美运行 但刚刚在使用 iOS 8 1 的 iPhone 6 Plus 上报告了一个问题 对于用户来说每次都会发生这种情况 但我无法重现它 我相信这与 iOS
  • 为什么php命令行无法获取ip地址?

    我的 var www read php 中只有一行 并在本地计算机 127 0 0 1 上构建我的灯 echo SERVER REMOTE ADDR 当输入 127 0 0 1 read php 时 我得到输出 127 0 0 1 何时在控
  • scipy curve_fit 无法拟合 tophat 函数

    我正在尝试将高帽函数拟合到某些数据 即 f x 对于整条实数线来说是常数 但有限长度的一段除外 它等于另一个常数 我的参数是 tophat 函数的两个常量 中点和宽度 我尝试使用 scipy optimize curve fit 来获取所有
  • Go 依赖于 C 运行时吗?

    我找不到 Go 依赖于 C 运行时的信息吗 如果依赖的话 是否静态编译成二进制文件 使得Go编写的应用程序可以在任何地方运行而无需依赖 这里的主题是关于什么是 C 运行时 https stackoverflow com questions
  • Android Java 文本转语音查看额外字符串信息

    我已经浏览了许多适用于 Android 的文本到语音示例 并且我遇到了一个我认为非常简单的问题 但我一生都无法解决它 我只是希望能够查看 EXTRA AVAILABLE VOICES 的输出 例如 根据这个链接 http developer
  • 如何在没有任何.xml配置的情况下使用spring 3.X注释

    我是 Spring 新手 我不喜欢使用 xml 作为 spring 配置 所以我只想使用注释 以下是我的测试代码 它在没有 spring 的情况下运行良好 但是如果我使用 DI 并添加注释 Resource 我会得到 NullPointEx
  • 无法弄清楚如何在 while 循环内正确递增变量,C

    编辑 在我的 IDE 中重写代码后 今天我第八次犯了菜鸟错误 给我的输入提供了错误的数据类型 该错误已被修复 但我的输出仍然不正确 关于我的目标的详细信息 在进行找零时 您很可能希望最大限度地减少为每个客户分发的硬币数量 好吧 假设收银员欠
  • PHP 与 BASH 的 CLI 脚本比较? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我从未在 CLI 中使用过 PHP 但我见过使用 PHP 代码运行的脚本 我想知道 当 PHP 如此流行并且能够在 CLI 中运行时 我们为什么
  • Flash 游戏服务器建议(Node.js、Red5 等)

    快速总结 我们已经完成了一个类似于俄罗斯方块的 Flash 游戏 可以 链接 进行多人游戏 做了一些研究并在这里询问后 闪存套接字 点对点功能 https stackoverflow com questions 6921292 flash
  • 如何通过不同页面(上下文)共享来自 Streambuilder 的提供者数据

    我想在小部件上实时获取来自 firebase 的数据 当我尝试使用StreamProvider然后使用Navigator push 推送的小部件无法获取值Provider of context 我尝试把StreamProvider作为的父母
  • ASP.NET Core 5 MVC:httpContext.User 未在自定义 CultureProvider 中进行身份验证

    我必须在我的网络应用程序中添加本地化 请求是 grpc 服务将为所有用户提供默认语言 因此在启动时我尝试读取该值 但不知道如何在 new 中使用注册的服务CustomRequestCultureProvider public static
  • Android 上的库项目的独立测试项目

    我的问题是 如何创建 Android独立的Android 库的测试项目 我有我的安卓机library 在项目设置中标记为 库 和一个包含我的 JUnit 测试类的 Android 项目 这test项目正确引用了 Android 库 在 An
  • 在事务内的 Access 中执行 UPDATE SQL 时超出系统资源

    我正在执行一个简单的UPDATE tblTable SET DataSet 3在一个事务内 但在尝试运行它几秒钟后 我收到 3035 系统资源超出 大约有 30K 行 Dim db As DAO Database wrk As DAO Wo
  • 使用seaborn调整子图的大小

    我最近刚刚开始使用 matplotlib 和 seaborn 来绘制我的图表 这是我到目前为止编写的代码 count 1 l 13 0 47 29 10 plt figure figsize 30 40 for ww in l temp d
  • 如何使用运算符<<打印类对象

    我想为 AutoData 类编写一个打印函数 其中包含有关汽车的信息 通过这个打印函数 我理想地希望打印出包含许多不同类对象的向量 我已经为对象的每个元素编写了 get 函数 但我仍然有点不确定如何使用这些函数来编写函数以以下格式打印数据
  • javafx webview 无法正确显示 html 页面

    当我测试这个示例程序时 webview 无法正确显示 html 页面 第一页 第一个圆圈 显示正确 但 它应该每 10 秒更改一次页面 但事实并非如此 它应该显示图表 当您单击第二个圆圈时 但它没有 它应该显示显示图像 当您单击第三个圆圈时