Javascript: MutationObserver / обнаружение глобальных изменений правил таблицы стилей
Последние несколько дней я застрял, пытаясь найти способ обнаружить / вызвать глобальное событие изменения CSS. Да, глобальный (т.е. не тот, который установлен самим элементом (например, style="background:red;"), но задан в отдельном файле .css).
Я пытался использовать MutationObserver (как мой ловец событий / экземпляр), но этот экземпляр, похоже, не отвечает моим требованиям. Вместо этого наиболее логичным способом (насколько мне известно) было бы сохранение всех CSS-правил (целевого файла) и установка интервала, который будет проверять наличие обновлений (сравнивать сохраненный список) каждые x секунд. Но, конечно, это не будет такой хорошей практикой, поскольку это пустая трата памяти.
Какие-либо предложения? Они были бы оценены много!
1 ответ
Я нашел эту функцию очень полезной. Но я не уверен, что это сработает так, как вы этого хотите.
Я обнаружил, что это обнаруживает изменения, сделанные в инспекторе (но я читал, что могут быть некоторые проблемы с псевдоклассами из-за соображений безопасности, поскольку вы можете определить, была ли ссылка посещена).
Возвращает одно правило, например: 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;
}
}, '');