2023-02-16 332
javafx加载与以前已加载的页面相同的页面时显示了一些奇怪的行为.下面的代码说明了此问题:
上课后,加载了页面,然后使用自定义样式类应用了高光.此亮点正确渲染.
最后,通过用户输入事件,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很重,我更喜欢重复使用对象,而不是每次我想恢复原始页面时都创建新的./p>
这是一个SSCCE,演示了HTML含量的重新加载.它与您的方法有所不同,但故事是相同的,尽管没有尝试像您这样的外部URL加载外部URL.由于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);
}
}
以上所述是小编给大家介绍的WebView未重新加载具有相同URL的页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34088.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态