JavaFx WebEngine - Overwriting a website's stylesheet with (local) files

一笑奈何 提交于 2019-12-18 07:18:54

问题


I'd like to customise the appearance of a website that I am loading, so I created a little test.css file that does nothing but changing the look of all table rows:

tr {
    height: 22px;
    background-image: url("test.png");
}

How do I get he WebEngine to load this file and replace the page's own CSS rules with mine? Also, i'd like to be able to load page-specific css files and not one huge file for all pages.


I found this page, but it only shows how to run through the DOM and assign a new style to the desired elements by hand. This is, of course, not what I want. Instead, I'd like the browser to use my files as 'user defaults'.

Thx for any help :)


回答1:


First of I have to state, that I hope you know what you are doing, as these things can seriously damage a web site. So here is what you can do:

You grab the Document from the WebEngine, retreave the head element and add a style child element to it, containing the src location of the stylesheet you want to add.

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);

By the way, JavaScript can be added in a similar way, it's just 'script' instead of 'style'




回答2:


I would do like this to ADD or REPLACE any rules :

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

... given a

<style id="my_style"></style> 

tag in the HTML document.




回答3:


setUserStyleSheetLocation()was designed for that very purpose: to let the user of the web page, style it as they want.

Usage:

webEngine.setUserStyleSheetLocation(styleSheetURL.toString());



来源:https://stackoverflow.com/questions/32751342/javafx-webengine-overwriting-a-websites-stylesheet-with-local-files

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!