document.styleSheets 不会检测所有样式表



我正在尝试在任何加载的页面中检测(然后更改(样式表。

我尝试以下代码:

// from https://developer.mozilla.org/en-US/docs/Web/API/StyleSheetList
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;
}
}, '');
console.log(allCSS);

例如,当我在此页面上运行此代码时,我在控制台中获得了一些样式表。

然而,这绝对不是所有的风格,它实际上只是其中的一小部分。

例如,在调试器中,我看到页面从"cdn.sstatic.net"加载all.css,具有许多样式,但没有显示任何样式。

我做错了什么?我怎样才能得到所有的样式表?

感谢!

CssRules

在某些浏览器中,如果样式表是从其他域加载的,
调用cssRules会导致安全错误。

  • 用户代理(默认(样式表在document.styleSheets中不可见

CSSStyleSheet 接口(规格(

cssRules 属性必须遵循以下步骤:

  • 如果未设置源清理标志,则引发 SecurityError 异常。
  • 返回一个表示 CSS 规则的只读实时 CSSRuleList 对象。

如果需要获取和更改在document加载.css文件,您可以请求在DevTools查看的文件,从document中删除所有现有的样式表,对响应文本进行调整,将调整后的文本作为.css附加到document<style>元素。

最新更新