当前位置: 首页 > 面试题库 >

使用Javascript将CSS样式表作为字符串注入

蒋高杰
2023-03-14
问题内容

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

我目前不使用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时替换CSS,而不是附加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及以下版本最多只允许32个样式表,因此在使用第一个代码片段时要格外小心。IE10中的数量增加到4095。

2020编辑:
这个问题很老,但是我仍然偶尔收到有关此问题的通知,因此我将代码更新为稍微现代一点的代码,并替换.innerHTML.textContent。此特定实例是安全的,但最好避免使用innerHTML这种做法,因为它可能是XSS攻击媒介。



 类似资料:
  • 问题内容: 我假设这是不可能的,但是如果万一出现这种情况,或者某个人袖手旁观,有没有办法使用CSS来定位某些字符? 例如,将段落中的所有字母设为红色,或者在我的特殊情况下,将所有标记为class的元素都设为红色。 问题答案: 这在CSS中是不可能的。您唯一的选择是,这不会削减它。使用JavaScript或(如您在注释中所述)使用服务器端语言。

  • 问题内容: 我想使用正则表达式向值 添加一个(变量)标记,该模式在PHP上可以正常使用,但是在将其实现为JavaScript时遇到了麻烦。 模式是(是变量): 我逃脱了反斜杠: 但这似乎不对,我记录了模式及其确切的样子。有任何想法吗? 问题答案: 要从字符串创建正则表达式,必须使用JavaScript的object。 如果你也想匹配/替换超过一次,那么你就 必须添加的(全局匹配)标志。这是一个例子

  • 问题内容: 刚开始使用Bash脚本编写时,偶然发现jq可与JSON一起使用。 我需要将如下所示的JSON字符串转换为表格以在终端中输出。 我要在终端中显示的内容: 请注意,我不想显示每一行的email属性,因此jq命令应该涉及一些过滤。下面为我​​提供了一个简单的名称和ID列表: 问题是,我无法将其显示为表格。我知道jq有一些格式化选项,但不如我使用时的选项好。我想我想在一个数组中获取这些值,然后

  • 问题内容: 如何解析和评估字符串(例如)中的数学表达式而不调用其数值? 在该示例中,我希望函数接受并返回。 问题答案: 我最终选择了该解决方案,该解决方案可用于对正整数和负整数进行求和(对正则表达式进行少许修改也可用于十进制): 我不确定它是否比eval()快,但是由于必须多次执行该操作,因此与创建javascript编译器实例负载相比,运行此脚本要舒服得多

  • 我正在遵循这个位置中指定的示例,将现有的HTML转换为可访问的PDF。 https://developers.itextpdf.com/de/content/itext-7-examples/itext-7-converting-html-pdf/pdfhtml-accessible-pdf-创建 有没有一种方法可以将CSS作为字符串传递给PDF转换器,而不是在html文件本身中指定它?我需要根据

  • 请写一个字符串转成驼峰的方法? 例如:border-bottom-color -> borderBottomColor 解决 python解决方法: def convert(one_string,space_character): #one_string:输入的字符串;space_character:字符串的间隔符,以其做为分隔标志 string_list = str(one_str