Javascript:MutationObserver/detect全局样式表规则更改

Javascript:MutationObserver/detect全局样式表规则更改,javascript,css,events,stylesheet,mutation-observers,Javascript,Css,Events,Stylesheet,Mutation Observers,在过去的几天里,我一直在努力寻找一种检测/触发全局CSS更改事件的方法。是的,是全局的(因此不是由元素本身设置的(例如style=“background:red;”),而是在单独的.css文件中设置的) 我曾尝试使用MutationObserver(作为我的事件捕捉器/实例),但这个实例似乎无法满足我的需求。相反(据我所知),最合乎逻辑的方法是存储(目标文件的)所有CSS规则,并设置一个间隔,每隔x秒检查一次更新(比较存储的列表)。但当然,这不是一个很好的做法,因为这是浪费内存 有什么建议吗?他

在过去的几天里,我一直在努力寻找一种检测/触发全局CSS更改事件的方法。是的,是全局的(因此不是由元素本身设置的(例如style=“background:red;”),而是在单独的.css文件中设置的)

我曾尝试使用MutationObserver(作为我的事件捕捉器/实例),但这个实例似乎无法满足我的需求。相反(据我所知),最合乎逻辑的方法是存储(目标文件的)所有CSS规则,并设置一个间隔,每隔x秒检查一次更新(比较存储的列表)。但当然,这不是一个很好的做法,因为这是浪费内存


有什么建议吗?他们会吃得饱饱的

我发现这个函数非常有用。但我不确定它是否会按你希望的方式触发

我发现这可以检测检查器中所做的更改(但我了解到由于安全原因,伪类可能会有一些问题,因为您可以检测到是否访问了链接)

返回一个规则,如:body{color:red;}

document.styleSheets[0].cssRules[0].cssText;
或者,这将返回所有附加的样式表

var allCSS = 
    [].slice.call(document.styleSheets)
    .reduce(function (prev, styleSheet) {
        if (styleSheet.cssRules) {
            return prev +
                [].slice.call(styleSheet.cssRules)
                    .reduce(function (prev, cssRule) {
                        return prev + cssRule.cssText;
                    }, '');
        } else {
            return prev;
        }
    }, '');

查看全局CSS更改的示例可能会有所帮助,例如,在文档的头部添加了
元素,或者是因为媒体查询等@wOxxOm这听起来可能真的很好,但真的很愚蠢。但我正在开发自己的“开发工具”,它最终可以嵌入到JavaScript应用程序中。这种“更改”是如何发生的,只需在开发者工具(chrome/firebug等)中实时编辑CSS文件,也不需要从“样式”选项卡中实时编辑CSS文件(实际上与前面提到的相同)。我的意思是,即使您编辑该文件,页面将如何准确地更新其链接样式表?因为没有内置的自动更新功能,所以我的问题暗示您可能可以检测到该事件。无论如何,MutationObserver肯定不会检测到CSS规则的变化。你是对的。编辑CSS文件不会在当前DOM中更新。我基本上是想弄清楚一个元素是否还有一个伪元素。我目前正在使用window.getComputedStyle($(currentNode)[0],':after').getPropertyValue(“content”),它基本上告诉我在:after选择器中的给定节点上是否找到属性“content”。但是由于伪元素不是DOM的一部分。我必须找到/刺激一种方法来捕捉这些出现/消失(因此基本上,如果它们被删除/添加,就会有东西捕捉到这个事件)。好的,Chrome扩展可以使用事件监听器,所以我猜FireFox可能也有类似的东西。。。