JavaFx WebEngine - 使用(本地)文件覆盖网站的样式表

时间:2015-09-24 00:02:38

标签: java html css javafx-8 javafx-webengine

我想自定义我正在加载的网站的外观,所以我创建了一个小[{'eventId': '123', 'key2': 'somestuff:\nthis, will, be, a problem,\nmaybe?=,\nanotherkey=anothervalue', 'goodkey': 'goodvalue', 'gotit': 'see,\nthe problem===s'}, {'eventId': '1234', 'key2': 'value2', 'key1': 'value1', 'key3': 'value3'}, {'eventId': '12345', 'key1': '\nmsg= {this is not a valid key value pair}', 'validkey': 'validvalue'}]文件,除了更改所有表行的外观之外什么都不做:

test.css

如何让WebEngine加载此文件并将页面自己的CSS规则替换为我的? 此外,我希望能够加载页面特定的CSS文件,而不是所有页面都加载一个大文件。


我找到了this page,但它只显示了如何运行DOM并手动为所需元素指定新样式。当然,这不是我想要的。相反,我希望浏览器将我的文件用作用户默认设置'。

任何帮助的Thx:)

3 个答案:

答案 0 :(得分:1)

首先我必须说明,我希望你知道你在做什么,因为这些东西会严重损害网站。 所以你可以做到这一点:

您从Document抓取WebEngine,撤消head元素并向其添加style子元素,其中包含您想要的样式表的src位置添加。

Document doc = webView.getEngine().getDocument();
URL scriptUrl = getClass().getResource(pathToAttachedDocument); // pathToAttachedDocument = CSS file you want to attach
String content = IOUtils.toString(scriptUrl); // Use Apache IO commons for conveniance
Element appendContent = doc.createElement("style");
appendContent.appendChild(doc.createTextNode(content));
doc.getElementsByTagName("head").item(0).appendChild(appendContent);

顺便说一句,JavaScript可以以类似的方式添加,它只是脚本'而不是' style'

答案 1 :(得分:0)

我会这样做以添加或替换任何规则:

String css  = getFileAsString("style.css");
Document doc = webEngine.getDocument();
Element e = doc.getElementById("my_style");
e.setTextContent(css);

......给出了

<style id="my_style"></style> 
HTML文档中的

标记。

答案 2 :(得分:0)

setUserStyleSheetLocation()专为此目的而设计:让网页的用户根据需要设置样式。

用法:

webEngine.setUserStyleSheetLocation(styleSheetURL.toString());