【发布时间】:2019-04-24 20:39:12
【问题描述】:
Chrome/ium 或 Firefox 浏览器扩展(也称为附加组件/WebExtensions)实际上能否以某种方式覆盖媒体查询的结果?
我的意思是,对于 JS window.matchMedia(),这可能很简单:只需注入一个覆盖该 JS 函数的内容脚本。
但如果使用“真正的”CSS 媒体查询(在 css 文件中),这实际上是不可能的,不是吗?
我显然可以注入自己的 CSS,但这不是我想要的:我只是想触发网站的 CSS 做一些不同的事情,即假设不同的媒体查询结果。
一些背景知识:如果您想知道为什么,我的用例是覆盖 Firefox 67 中引入的新 prefers-color-scheme CSS media feature。(目前它不适用于支持浏览器/WebExtensions 的任何其他浏览器。)
在Mozilla's Discourse instance上交叉发布。
【问题讨论】:
-
所有 CSS 都被加载到
document.stylesheets中,JavaScript 可以读取和修改它,就像它可以修改 DOM 的其余部分一样。如果扩展程序无法进入它,我会感到惊讶。 -
谢谢,虽然很快调查了一下,但这似乎很难:那里没有纯 CSS,有 CSS 列表和远程位置。最后,看起来我需要重新下载文件,甚至在我的插件中编写自己的 CSS 解析器才能做到这一点。
-
styleSheet对象包含已解析的样式,类似于 DOM 包含已解析的 HTML 的方式。可以直接遍历修改属性,不需要自己去解析文件。 -
@Barmar 好的,如果您愿意,请随时提交真实答案(附上一些细节)。在 cmets 中讨论这个是没有意义的。
-
我不会详细说明您要执行的操作,但这里有一个动态修改样式表的代码示例:stackoverflow.com/a/8630641/1491895
标签: javascript css google-chrome-extension firefox-addon firefox-addon-webextensions