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

2023-11-22

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

我目前没有使用 jQuery 或类似的,所以纯 Javascript 解决方案会更好。


有几种方法可以做到这一点,但最简单的方法是创建一个<style>元素,设置其文本内容属性,并附加到页面的<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;
  }
`);

如果你愿意,你可以稍微改变一下,这样 CSS 就会被替换addStyle()被调用而不是附加它。

/**
 * 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 edit:请注意,IE9及以下版本仅允许最多 32 个样式表,所以在使用第一个片段时要小心。在IE10中该数字增加到4095。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Javascript 将 CSS 样式表作为字符串注入 的相关文章

  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • jquery从变量中删除html元素

    我将 html 保存在变量中 var itinerary events today html 我有很多 html 和一个按钮我想删除 它的 ID 为 myButton 如何从变量中保存的 html 中删除它 我建议这种方法 var itin
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 如何在使用页面锚点导航时设置“激活”类以在 Angular 2 中引导导航栏?

    我正在使用 Angular 2 和 Bootstrap 4 创建一个单页网站 我创建了一个始终位于页面顶部的导航栏组件 并且我正在使用页面锚点导航 id 请注意 我还没有创建路由模块 到目前为止还没有必要这样做 导航栏代码如下
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • Grails 在 javascript 内的 GSP 站点中使用 grails var

    我有一个在 GSP 文件中的 javascript 代码中使用 grails 变量值的问题 例如 我有一个会话值session getAttribute selectedValue 我想在 javascript 代码部分使用这个值 我现在的
  • 如何阻止破折号自行包裹?

    我有一个标题 标题最后一个单词的末尾是一个破折号 单词和破折号之间没有空格 当浏览器窗口变小时 破折号会中断并换成新行 在自己的行上有一个破折号是不好的排版 如何停止破折号之前的换行 以便最后一个单词运行到新行 这是代码 h1 XYZ co
  • 避免响应式页面的重复内容

    我目前正在做一个涉及响应式设计的项目 整个布局应该使用HTML和CSS来实现 我知道可以使用 java 脚本将内容从一个列布局移动到另一列布局 而无需复制内容 但是使用 HTML 和 CSS 是否可以实现相同的效果 以下面的例子为例 它会在
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win

随机推荐

  • 如何修改运行时加载的 DLL 的导入地址表

    我想挂钩在运行时从加载的 DLL 调用的函数 我使用了 Windows Via C C 一书中的 CAPIHook 类 DLL 注入由 Install System Wide hook 完成 The hooking 由修改 IAT 完成 但
  • 如何填充 UIView 的背景图片

    我有一个UIView我这样设置背景图片 self view backgroundColor UIColor colorWithPatternImage UIImage imageNamed sfond appz png 我的问题是背面图像不
  • 从技术上讲,是否可以通过编程方式截取网站的屏幕截图?

    您认为以编程方式截取网站的屏幕截图在技术上可行吗 我想制作一个计划的 Python 任务来抓取网站列表并截取它们的主页屏幕截图 您认为技术上可行吗 或者您是否知道提供此类服务的第三方网站 Input url gt Output screen
  • “借用的数据不能存储在其封闭之外”是什么意思?

    编译以下代码时 fn main let mut fields Vec new let pusher mut a str fields push a 编译器给我以下错误 error borrowed data cannot be stored
  • python-docx:将表解析为 Pandas Dataframe

    我正在使用python docx用于提取 MS Word 文档的库 我可以使用同一个库从Word文档中获取所有表格 但是 我想将表解析为 panda 数据框架 是否有任何内置功能可以用来将表解析为数据框架 或者我必须手动执行此操作 另外 是
  • 如何处理同构呈现形式的早期输入

    我有一个 React 应用程序 其中包含一个表单 该表单在服务器端呈现 并预先填充了用户正在进行的工作 问题是 如果用户在应用程序加载之前编辑表单中的值 则应用程序不会意识到更改 当用户保存时 服务器呈现的未更改的数据将被重新保存 并且用户
  • EventSource:总是出现错误

    首先EventSourceAPI 我写了最学术的例子 问题是我总是遇到错误 而且找不到任何有用的信息 当我加载时home html JS脚本停止于source onerror 我将其打印到控制台 但分析对象时我找不到任何错误类型或消息 所以
  • Laravel:vue 组件未渲染

    尽管遵循了以下教程 但我的 vue 组件并未在页面上呈现 我有以下布局 master blade php
  • 如何导航到父活动

    好吧 当我在做某事并且我需要在我的应用程序中配置操作栏时 我从http developer android com我找到了我要找的东西 public boolean onOptionsItemSelected MenuItem item s
  • geom_bar 的 gganimate 问题?

    自从 David Robinson 发布了他的 gganimate 包以来 我一直怀着羡慕和钦佩的心情看着 Twitter 上出现的各种 ggplot 动画 并认为我自己也可以玩一玩 我在使用 geom bar 时遇到 gganimate
  • firefox @font-face 因 fontawesome 失败

    我在运行的 OSS 应用程序上使用 FontAwesome 字体 但我似乎无法通过 Firefox 的字体清理程序 这些文件都在同一个域中提供 路径是正确的 我使用的是 FontAwesome 的官方 css 当通过其网站和本地文档提供时
  • 判断对象的类型? [复制]

    这个问题在这里已经有答案了 有没有一种简单的方法来确定变量是列表 字典还是其他变量 有两个内置函数可以帮助您识别对象的类型 您可以使用type 如果您需要对象的确切类型 并且isinstance to check对象的类型针对某物 通常 您
  • C# 中的 IRC 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想在我的程序中嵌入一个小聊天窗口 用作基本的 IRC 客户端 这需要有限的功能 例如连接 断开连接 列出用户和发送私人消息 在撰写本文时 我已经尝试了几个臃肿的库 这些库使得创建一
  • 字典方法 Remove 和 Clear (.NET Core) 在枚举期间修改集合。没有抛出异常

    我正在尝试实现一个缓存机制安全地枚举集合 并且我正在检查内置集合的所有修改是否都会触发InvalidOperationException由各自的枚举器抛出 我注意到在 NET Core 平台中Dictionary Remove and Di
  • 如何使用 vaadin 使 VerticalLayout 可滚动?

    我有一个组件 它作为我所有页面的通用布局而存在 该组件的布局如下 使用油漆制作 所以请抱歉 p 向右箭头表示该布局是 Horizo ntalLayout 向下箭头表示 VerticalLayout 我真的很感兴趣使 bodyContent
  • 为什么归并排序中阈值交叉后要使用插入排序

    我到处都读到了分而治之的排序算法 例如Merge Sort and Quicksort 与其递归直到只剩下一个元素 不如转移到Insertion Sort当达到某个阈值 例如 30 个元素 时 这很好 但为什么只是Insertion Sor
  • 我如何在 google colab 中动态(循环)显示图像?

    我一直在尝试使用 pyplot matplotlib 来显示图像 因为它们在循环中变化 但我无法让任何东西工作 我基本上无法更新所显示的图像 这是复制问题的代码 f plt figure 1 ax plt gca show obj ax i
  • C++ 默认初始化是否保留先前的零初始化?

    如果具有静态存储持续时间的对象的 C 构造函数未初始化成员 是否需要保留先前的零初始化 或者是否会为成员留下不确定的值 我对 C 规范的解读是 它是自相矛盾的 Example include
  • 将 10,000,000 个文件从 Linux 上传到 Azure Blob 存储

    我对 S3 有一些经验 并且过去使用过s3 parallel put将许多 数百万 个小文件放在那里 与Azure相比 S3的PUT价格昂贵 所以我正在考虑切换到Azure 然而 我似乎无法弄清楚如何使用将本地目录同步到远程容器azure
  • 使用 Javascript 将 CSS 样式表作为字符串注入

    我正在开发一个 Chrome 扩展程序 我希望用户能够添加自己的 CSS 样式来更改扩展程序页面 而不是网页 的外观 我研究过使用document stylesheets 但它似乎希望将规则分开 并且不允许您注入完整的样式表 有没有一种解决