I'm developing a Chrome extension, and I'd like users to be able to add their own CSS styles to change the appearance of the extension's pages (not web pages). I've looked into using document.stylesheets
, but it seems like it wants the rules to be split up, and won't let you inject a complete stylesheet. Is there a solution that would let me use a string to create a new stylesheet on a page?
I'm currently not using jQuery or similar, so pure Javascript solutions would be preferable.
I had this same need recently and wrote a function to do the same as Liam's, except to also allow for multiple lines of CSS.
The source of this function. You can download from the Github repo. Or see some more example usage here.
My preference is to use it with RequireJS, but it also will work as a global function in the absence of an AMD loader.
Thanks to this guy, I was able to find the correct answer. Here's how it's done:
fiddle
You could create a style element and add the string as the innerHTML. Something like this:
(Important edit: Be aware that IE9 and below only allows up to 32 stylesheets, so watch out when using the above snippet. The number was increased to 4095 in IE10.)
If, when a user adds new CSS, you want to remove the old styles and add the new, you can switch the function up so you have a reference to one node.