我正在通过javafx web engine.load(url)加载网址。我的要求是在页面加载时修改嵌入式HTML,以通过更改字体的来源正确加载字体。我能够获取文档对象并转换为字符串并替换相应的部分,然后使用 webengine.loadContent(string)加载HTML。但是,一旦页面出现并单击提交按钮,就不会发生任何事情。下面是我的代码,所有这些都发生在:
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
String htmlBody = null;
@Override
public void changed(ObservableValue<? extends Worker.State> observableValue, Worker.State prevState, Worker.State newState) {
//To change body of implemented methods use File | Settings | File Templates.
//String htmlBody = null;
int count = 0;
if (newState == Worker.State.SUCCEEDED) {
browser.requestFocus();
// Get the document object from Engine.
Document doc = webEngine.getDocument();
try {
// Use Transformer to convert the HTML Object from the document top String format.
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "html");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
StringWriter outWriter = new StringWriter();
transformer.transform(new DOMSource(doc),new StreamResult(outWriter));
StringBuffer sb = outWriter.getBuffer();
htmlBody = sb.toString();
// Replace the font-family attribute in the style section to the actual URL of the font being used.
htmlBody = htmlBody.replace("font-family: medium", "font-family: url(http://1.10.30.45:8080/fonts/Md.ttf)");
observableValue.removeListener(this);
// Load the new HTML string to the Engine.
webEngine.loadContent(htmlBody, "text/html");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
});
webEngine.load(url);
//add the web view to the scene
getChildren().add(browser);
如果我删除以下2行,我可以点击登录按钮并转到欢迎页面。 observableValue.removeListener(本);
// Load the new HTML string to the Engine.
webEngine.loadContent(htmlBody, "text/html");
但在这种情况下,实际字体会更改为某些默认字体。
答案 0 :(得分:0)
按下提交按钮时运行的HTML / Javascript代码是什么?相关表单的action
属性是什么?我怀疑由于webEngine.loadContent()
调用,页面不知道提交表单的 where ,这就是它无效的原因。
有可能通过正常加载页面并使用userStyleSheetLocation
的{{1}}属性手动设置样式表(ref)来解决您的样式问题。我建议您使用WebEngine
进行一些实验。
答案 1 :(得分:0)
自定义字体加载问题通过jdk 8与最新版本的javafx解决。 jdk 1.8.0中的版本为 javafx.runtime.version = 8.0.0
早期JDK 1.7.0_45是 javafx.runtime.version = 2.2.45
感谢。