【发布时间】:2013-08-20 17:21:20
【问题描述】:
JavaFX 在加载与之前加载的页面具有相同 url 的页面时会显示一些奇怪的行为。下面的代码演示了这个问题:
类初始化后,页面被加载,然后使用自定义样式类将高亮应用于任意 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,因此我更喜欢重用该对象,而不是每次想要恢复到原始页面时都创建新的对象。
【问题讨论】:
-
“重建整个WebView”是什么意思?再次调用
webView.getEngine().load("your url");就足够了。这就像一个网页的刷新。无需重新创建 webview 实例。 -
我已经改写了我的文本,但是是的,因为它是我唯一可行的解决方案,每次我想重新加载我玩过的页面时,我都创建一个新的 webview 实例之前的 DOM 文档。看来 DOM 文档在 WebView 引擎内部被缓存。