可通过遍历document.styleSheets获取所有可读样式表的CSS文本,需处理跨域SecurityError、兼容IE的CSSRules及cssText缺失等问题。

可以通过遍历 document.styleSheets 集合,逐个读取每个样式表的规则(CSSRules 或 cssRules),再拼接或提取其文本内容。但需注意跨域限制和浏览器兼容性问题。
获取所有样式表的 CSS 文本内容
现代浏览器中,每个 CSSStyleSheet 对象提供 cssRules(标准)或 CSSRules(旧版 IE)属性,可用于访问内部规则。将所有规则的 cssText 拼接即可得到完整样式文本:
- 遍历
document.styleSheets,跳过 null 或无权限访问的样式表(如外链跨域样式表会抛出 SecurityError) - 对每个可访问的样式表,用 try/catch 包裹读取
sheet.cssRules - 遍历
cssRules数组,累加每条规则的cssText
处理跨域样式表和异常情况
外链的跨域 CSS 文件(如 CDN 上的样式)无法通过 JavaScript 读取规则内容,访问时会触发 DOMException。必须主动捕获并忽略:
- 使用
try...catch捕获SecurityError或DOMException - 检查
sheet.href判断是否为外链,结合同源策略预判风险 - 内联
<style>和同域外链样式表通常可读;<link rel="stylesheet">若跨域则不可读
兼容旧版 IE(IE9–11)的写法
IE9–11 不支持 cssRules,需用 CSSRules(注意大小写),且部分版本对 @import 规则支持不一致:
立即学习“Java免费学习笔记(深入)”;
- 统一用
sheet.cssRules || sheet.CSSRules获取规则列表 - IE 中
cssText可能缺失,可用rule.style.cssText替代(仅适用于普通规则,不适用于 @规则) - 建议优先使用现代标准,必要时再添加 IE 分支逻辑
简单可用的封装函数示例
以下函数返回一个字符串数组,每个元素对应一个可读样式表的完整 CSS 文本:
function getAllStyles() {const styles = [];
for (let i = 0; i const sheet = document.styleSheets[i];
try {
const rules = sheet.cssRules || sheet.CSSRules;
if (!rules) continue;
let cssText = '';
for (let j = 0; j cssText += rules[j].cssText + '\n';
}
if (cssText.trim()) styles.push(cssText);
} catch (e) {
// 跨域或权限不足,跳过
}
}
return styles;
}


















