gpt4 book ai didi

javascript - 使用 Javascript 将 CSS 样式表作为字符串注入(inject)

转载 作者:IT王子 更新时间:2023-10-29 03:18:04 25 4
gpt4 key购买 nike

我正在开发 Chrome 扩展程序,我希望用户能够添加自己的 CSS 样式来更改扩展程序页面(而非网页)的外观。我研究过使用 document.stylesheets,但它似乎希望将规则分开,并且不会让您注入(inject)完整的样式表。有没有一种解决方案可以让我使用字符串在页面上创建新的样式表?

我目前没有使用 jQuery 或类似的工具,因此最好使用纯 Javascript 解决方案。

最佳答案

有几种方法可以做到这一点,但最简单的方法是创建一个 <style>元素,设置其 textContent 属性,并附加到页面的 <head> .

/**
* Utility function to add CSS in multiple passes.
* @param {string} styleString
*/
function addStyle(styleString) {
const style = document.createElement('style');
style.textContent = styleString;
document.head.append(style);
}

addStyle(`
body {
color: red;
}
`);

addStyle(`
body {
background: silver;
}
`);

如果需要,您可以稍微更改一下,以便在 addStyle() 时替换 CSS。被调用而不是附加它。

/**
* Utility function to add replaceable CSS.
* @param {string} styleString
*/
const addStyle = (() => {
const style = document.createElement('style');
document.head.append(style);
return (styleString) => style.textContent = styleString;
})();

addStyle(`
body {
color: red;
}
`);

addStyle(`
body {
background: silver;
}
`);

IE 编辑: 请注意,IE9 及以下版本仅允许 up to 32 stylesheets ,所以在使用第一个片段时要小心。这个数字在 IE10 中增加到 4095。

2020 年编辑: 这个问题很老了,但我仍然偶尔会收到有关它的通知,所以我更新了代码,使其更现代一些并替换了.innerHTML.textContent .这个特定实例是安全的,但要避免 innerHTML在可能的情况下是一种很好的做法,因为它可以成为 XSS 攻击向量。

关于javascript - 使用 Javascript 将 CSS 样式表作为字符串注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15505225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com