WebView 不重新加载具有相同 URL 的页面

2024-01-02

当加载与之前加载过的页面具有相同 url 的页面时,JavaFX 会显示一些奇怪的行为。下面的代码演示了这个问题:

类初始化后,加载页面,然后使用自定义样式类将突出显示应用于任意 html 元素。该突出显示已正确呈现。

最后,通过用户输入事件,WebView 被告知加载一个新页面(具有相同的 URI)。不是按原样显示页面,而是同时显示突出显示内容。

WebView webView = new WebView();
static String URI = "http://www.example.com";

public void loadPage() {
    // Step 1: load page
    webView.getEngine().load(URI);

    // Step 2: Change style attribute in page
    (Element) element = xpath.evaluate("//div[@id='mydiv']", webView.getEngine().getDocument(), XPathConstants.NODE);
    element.setAttribute("class", "mystyle");
}

handle() {
    // Step 3: load page again
    webView.getEngine().load(URI);
}

我尝试过使用 WebView.getEngine().reload() 强制页面重新加载、禁用缓存、等待工作人员完成等。

我当前看到的唯一选择是创建 WebView 的新实例,但由于这相当占用 CPU 资源,因此我更喜欢重用该对象,而不是每次想要恢复到原始页面时都创建新的对象。


这是一个 SSCCE,演示了 HTML 内容的重新加载。它与您的方法有点不同,但故事是相同的,尽管没有尝试加载像您这样的外部 URL。你对 webEngine 缓存的看法是正确的,因为webEngine.reload()不加载原始内容。

public class WebViewReload extends Application {

    private String content = "<html>"
            + "    <head>"
            + "         <style type=\"text/css\">"
            + "            .mystyle {"
            + "                padding: 20px;"
            + "                background-color: red;"
            + "                font-size: 30px;"
            + "            }"
            + "        </style>"
            + "    </head>"
            + "    <body>"
            + "        <div id=\"mydiv\">initial content</div>"
            + "    </body>"
            + "</html>";

    @Override
    public void start(final Stage stage) throws Exception {
        final WebView webView = new WebView();
        webView.getEngine().loadContent(content);
        // It is same as loading an external html source, like this
        // webView.getEngine().load(getClass().getResource("my.html").toExternalForm());

        Button btn1 = new Button("Apply style");
        btn1.setPrefWidth(200);
        btn1.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                Element element = webView.getEngine().getDocument().getElementById("mydiv");
                element.setAttribute("class", "mystyle");
                element.setTextContent("new content");
            }
        });

        Button btn2 = new Button("Reload content");
        btn2.setPrefWidth(200);
        btn2.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                webView.getEngine().loadContent(content);
                // following does not reload at all
                // webView.getEngine().reload();
            }
        });

        VBox vbox = new VBox(10);
        vbox.setPadding(new Insets(20));
        vbox.setStyle("-fx-background-color: gray");
        vbox.getChildren().addAll(webView, btn1, btn2);

        Scene scene = new Scene(vbox);
        stage.setScene(scene);
        stage.show();
    }

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

WebView 不重新加载具有相同 URL 的页面 的相关文章

  • 创建 RESTful WebService 并通过 Glassfish 4 提供服务

    我在 JEE6 中看到了很多关于 RESTful WebServices 的问题 所以我想与您分享这个示例解决方案 它展示了实现 RESTful Webservice 是多么容易 首先创建一个新的动态 Web 项目并将 Glassfish
  • 我的应用程序中的 google+ 集成

    我是 Android 开发新手 正在创建一个带有 Google 集成的 Android 应用程序 我看到了一个教程并开始遵循它 但自教程以来 Google 已经更新了 Google 集成 例如 在本教程中您曾经单击 获取配置文件 按钮htt
  • 如何选择主题与队列

    当我们设计应用程序时如何选择Topic Queue类型实现 我知道 a 如果有多个消费者使用该消息 则使用 Topicb 如果只有一个消费者则使用Queue 请提供更多需要考虑的点 比如并发 消息持久化 负载均衡等等 Thanks Rw 如
  • 在java中将HTML转换为RTF?

    我需要将 HTML 转换为 RTF 我正在使用以下代码 private static String convertToRTF String htmlStr OutputStream os new ByteArrayOutputStream
  • 无法在 PHP 中接收 JSON POST 请求

    我正在将 JSON 对象从 Java 传递到 PHP 我正在使用 jdk 1 8 和 WAMPserver 下面是Java代码 import java io IOException import org apache http client
  • 自动装箱是否调用 valueOf()?

    我试图确定以下陈述是否保证为真 Boolean true Boolean TRUE Boolean true Boolean valueOf true Integer 1 Integer valueOf 1 我一直认为自动装箱相当于调用va
  • double 或 BigDecimal 会溢出吗?

    Java 8 给了我们Math addExact https docs oracle com javase 8 docs api java lang Math html addExact int int 适用于整数 但不适用于小数 是否有可
  • Java 多态性中的字段如何工作? [复制]

    这个问题在这里已经有答案了 我正在读书面试问题 http javabypatel blogspot in 2016 04 java interview questions html关于java 发现了很好的例子 但感到困惑 因为没有很好 更
  • Finalize() 何时执行? [复制]

    这个问题在这里已经有答案了 在一次采访中我被问到 假设 JVM 在 A 类对象未被使用时运行 gc class A some code here protected void finalize code here 它是否保证finalize
  • StringBuilder - 重置或创建新的

    我有一个条件 StringBuilder 不断存储与大型平面文件 数百 MB 中的模式匹配的行 但是 在达到条件后 我将 StringBuilder 变量的内容写入文本文件 现在我想知道是否应该通过重置对象来使用相同的变量 gt strin
  • 菜单项标题未显示

    菜单项的标题未显示在片段内 我在菜单文件中有两个项目 第一个是带有图标和标签的showAsAction always在工具栏中显示图标 第二个只有标题 我不知道这里出了什么问题 菜单项的所有操作均有效 例如下面 菜单 销售 xml menu
  • Java XPath API - 获取表示子树的字符串

    我的问题不是关于 xpath 语法 而是与 xpath 周围的 java API 有关 考虑以下 xml
  • 在同步子句中抛出异常的副作用?

    从同步子句中抛出异常是否有任何不清楚的副作用 锁会发生什么情况 private void doSomething throws Exception synchronized lock doSomething 我没有看到任何副作用 The 锁
  • 控制台中的 Java msg - 两个方法具有相同的方法签名但不提供可分配的类?

    在迁移到 java 1 8 时 我升级了项目中的许多依赖项 它是基于spring 4 3的应用程序 有很多外部依赖 例如 JMS HTTP客户端 FTP XML等 当应用程序启动时 我现在在控制台中收到以下消息 两个方法具有相同的方法签名但
  • 在java中访问dll方法

    我正在尝试访问java中用c 编写的dll方法 从下面的代码我试图构建已成功生成的 dll using System using Microsoft Win32 namespace CyberoamWinHelper public clas
  • 从java类文件获取apache webcontents文件夹的绝对路径[重复]

    这个问题在这里已经有答案了 需要在动态 Web 应用程序内获取 java 类文件中的绝对路径 实际上我需要获取 apache webapps 文件夹的路径 部署 webapps 的位置 e g apache root webapps my
  • Scala 不可变 Map 速度慢

    当我创建地图时 我有一段代码 val map gtfLineArr 8 split map split collect case Array k v gt k v toMap 然后我使用这张地图来创建我的对象 case class MyOb
  • Java中ThreadFactory的使用

    有人可以简要解释一下如何以及何时使用 ThreadFactory 吗 使用和不使用 ThreadFactory 的示例可能确实有助于理解差异 Thanks 这是一种可能的用法 假设您有一个ExecutorService它执行你的Runnab
  • DocumentBuilder 解析产生无效字节 2 of 4 字节 UTF-8 序列错误

    我正在尝试解析包含字符串的字节数组Impresi n in XML final DocumentBuilderFactory builderFactory DocumentBuilderFactory newInstance final D
  • Tomcat 中 JNDI 的 Java Mail API 配置文档

    我花了几天时间弄清楚如何通过 JNDI 在 Tomcat 中配置 javax mail Session有认证 现在我明白了 但只是在深入研究代码之后 这次我看到了有史以来最糟糕的代码 javax mail Service connect S

随机推荐

  • 如何针对集合调用 Expression>

    我有一个从存储库模式定义存储库的接口 interface IRepository List
  • dplyr 根据向量中的名称改变多列

    我想使用以下方法将两列相乘dplyr s mutate功能 但是我不想为每个变异条件编写一个新行 而是想使用存储在向量中的列的名称var1 and var2 例如 最后我想在现有的bankdata与名字result1其中包含现金列和贷款列相
  • Flash Builder 4.6 - 代码隐藏方法

    我正在尝试找出使用 Flash 构建器用于移动应用程序的 代码隐藏 的正确方法 我正在创建一个 Flex 移动 AIR 项目 基于 选项卡式视图 模板 将我的 UI 设置为设计模式 现在我希望所有逻辑都位于一个单独的类中 该类将相应地改变
  • 我可以假设 C stdlib 函数不使用 errno 吗?

    我正在看一段 C 代码 它的意思是 void printerror char message printf There was an error s n message switch errno do stuff depending on
  • 使用 SolrJ 和 Solr4 进行分面

    我已经浏览过该网站上的相关问题 但尚未找到相关的解决方案 使用以下形式的 HTTP 请求查询我的 Solr4 索引时 facet true facet field country 响应包含所有不同的国家以及每个国家的计数 如何使用 Solr
  • 调试期间未命断点

    为什么 NetBeans Android 1 5 中的断点无法触发 你有一个叫做在其他 IDE 中开发 http developer android com guide developing other ide html它告诉你如何在 ec
  • 在 Linux 上哪里安装 GlassFish?

    免责声明 我对 Linux 还比较陌生 我争论过将其放在 SuperUser 或 ServerFault 上 因为答案does需要将 Linux 作为一个系统进行解释 而不是特定的编程问题 但是我从 Java 开发人员的角度对此感兴趣 并且
  • 如何在 Node.js 中设置 http.createClient 的超时?

    有一个帖子 如何在node js中设置客户端http连接的超时 https stackoverflow com questions 3586760 how do i set a timeout for client http connect
  • 如何获取组中对象的画布相对位置?

    通常一个对象相对于画布的位置可以从它的 left and top属性 但如果对象位于选择 组中 则这些属性将与组相关 有没有办法获得它们相对于画布的位置 当对象位于组内时 其相对于画布的坐标将取决于组的原点 以及对象的原点 假设我们有这段代
  • 使用云台信标设备进行室内定位如何提高数据的稳定性和准确性?

    在android中如何提高多个信标检测的稳定性 我正在使用Gimbal信标进行室内定位 蓝色是否适合室内位置数据访问 我在这方面进行了广泛的研究 因为我在充满会议室的走廊中放置了信标 所有会议室都在附近 首先 我建议将信标放置在天花板上 信
  • 如何在sbt中将jar打包到给定目录?

    在 sbt 中 如果我们执行package 将会生成一个jar文件target scala 2 12 XXX jar 但我想把jar文件放在myDirectory XXX jar 我怎样才能做到这一点 The target 默认路径的一部分
  • 使用 maven-shade-plugin 时出现多余的警告

    我在用Maven 阴影插件对于一个简单的 Maven 项目 该插件成功地将所有依赖项包含到最终的 阴影 jar 中 这个过程每次都很顺利 并且生产出的正是我所需要的 当运行 第一次 时 经过一段时间后clean 该插件很安静并且产生很少的输
  • 如何卸载 Laravel Passport

    我决定使用 JWT 并从项目中完全删除 Laravel Passport 我试图从composer remove laravel passport 然而 这并没有什么好处 Symfony Component Debug Exception
  • Javascript:我需要为对象中的每个变量放置 this.var 吗?

    在我最熟悉的 C 语言中 通常声明一个对象如下 class foo public int bar int getBar return bar Calling getBar 工作正常 忽略这一事实bar可能未初始化 变量bar within
  • Hadoop 中的重新分区

    我的问题主要是理论上的 但我有一些表已经遵循某种分区方案 可以说我的表是按天分区的 但在使用数据一段时间后 我们想修改为月份分区 我可以轻松地重新创建具有新分区定义的表并重新插入数据 这是最好的方法吗 当数据很大时听起来很慢 我看到 hiv
  • CakePHP 2 $this->Html->脚本顺序

    我试图将 JS 文件插入到视图中 但它们插入的顺序错误 在我的 default ctp 中我有这个 this gt Html gt script array https ajax googleapis com ajax libs jquer
  • MySQL 连接、分组依据、排序依据

    我有一个产品表 CREATE TABLE products id INT 以及这些产品的图片表 CREATE TABLE images id INT product id INT default TINYINT 1 我需要选择所有产品 并加
  • javafx如何使用复选框获取表视图中选定的行数据

    在这个项目中 我无法在控制台输出中获取复选框数据是否被选中 My code import java util Arrays import java util Iterator import java util List import jav
  • 在 Linux 上快速连接多个文件

    我正在使用 Python 多重处理为每个进程生成一个临时输出文件 它们的大小可能有几 GB 我制作了几十个 这些临时文件需要连接起来才能形成所需的输出 而这一步被证明是瓶颈 也是并行杀手 是否有一个 Linux 工具可以通过修改文件系统元数
  • WebView 不重新加载具有相同 URL 的页面

    当加载与之前加载过的页面具有相同 url 的页面时 JavaFX 会显示一些奇怪的行为 下面的代码演示了这个问题 类初始化后 加载页面 然后使用自定义样式类将突出显示应用于任意 html 元素 该突出显示已正确呈现 最后 通过用户输入事件