You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Chrome DevTools及扩展检测样式表中CSS类规则的修改?

如何通过Chrome扩展监听DevTools中样式表类规则的修改通知

完全可以实现这个需求,核心是借助Chrome DevTools提供的调试协议API,或者通过注入脚本监听样式表的变化,以下是两种可行的实现方案:

方案一:使用Chrome调试协议(更精准)

利用DevTools的CSS域事件,直接监听样式规则的修改,并且可以精准筛选出类选择器的变化:

  1. 配置扩展清单
    在manifest.json中声明DevTools相关配置和权限:
{
  "name": "样式表类规则修改监控",
  "version": "1.0",
  "manifest_version": 3,
  "devtools_page": "devtools.html",
  "permissions": ["activeTab"]
}
  1. 编写DevTools逻辑
    创建devtools.html引入脚本文件:
<!-- devtools.html -->
<!DOCTYPE html>
<script src="devtools.js"></script>

在devtools.js中连接调试协议,监听样式规则变化:

// 启用CSS调试域并监听规则修改事件
chrome.devtools.inspectedWindow.eval(`
  chrome.devtools.protocol.send('CSS.enable', {}, () => {
    // 监听样式规则变更事件
    chrome.devtools.protocol.on('CSS.styleRuleChanged', (event) => {
      const ruleData = event.params.rule;
      // 筛选出包含类选择器的规则(选择器含.)
      const hasClassSelector = ruleData.selectorList.selectors.some(s => s.value.includes('.'));
      if (hasClassSelector) {
        // 发送事件到扩展上下文,可用于展示通知
        window.postMessage({
          type: 'CLASS_RULE_UPDATED',
          payload: {
            selector: ruleData.selectorList.selectors.map(s => s.value).join(','),
            updatedStyle: ruleData.style.cssText,
            sourceSheet: ruleData.styleSheetId
          }
        }, '*');
      }
    });
  });
`);

// 创建侧边栏展示通知
chrome.devtools.panels.elements.createSidebarPane("类规则修改日志", (sidebar) => {
  sidebar.setPage("sidebar.html");
});
  1. 展示通知内容
    创建sidebar.html用于在DevTools侧边栏显示修改记录:
<!-- sidebar.html -->
<!DOCTYPE html>
<html>
<body style="padding: 10px;">
  <h3>类规则修改记录</h3>
  <div id="log-container" style="margin-top: 10px;"></div>
  <script>
    window.addEventListener('message', (msg) => {
      if (msg.data.type !== 'CLASS_RULE_UPDATED') return;
      const { selector, updatedStyle, sourceSheet } = msg.data.payload;
      const logEntry = document.createElement('div');
      logEntry.style.marginBottom = '10px';
      logEntry.style.paddingBottom = '10px';
      logEntry.style.borderBottom = '1px solid #eee';
      logEntry.innerHTML = `
        <p><strong>选择器:</strong> ${selector}</p>
        <p><strong>修改后样式:</strong> <code>${updatedStyle}</code></p>
        <p><strong>来源样式表ID:</strong> ${sourceSheet}</p>
      `;
      document.getElementById('log-container').prepend(logEntry);
    });
  </script>
</body>
</html>

方案二:使用MutationObserver监听样式表

如果不想依赖调试协议,也可以通过注入脚本,用MutationObserver监听页面样式表的变化:

在devtools.js中替换为以下代码:

chrome.devtools.inspectedWindow.eval(`
  // 遍历所有样式表,添加监听器
  document.styleSheets.forEach(sheet => {
    const observer = new MutationObserver((mutations) => {
      mutations.forEach(mutation => {
        // 忽略样式表href变化(比如动态加载样式)
        if (mutation.type === 'attributes' && mutation.attributeName === 'href') return;
        // 检查每个规则是否为类规则
        sheet.cssRules.forEach(rule => {
          if (rule.type === CSSRule.STYLE_RULE && rule.selectorText.includes('.')) {
            window.postMessage({
              type: 'CLASS_RULE_UPDATED',
              payload: {
                selector: rule.selectorText,
                updatedStyle: rule.style.cssText,
                sourceSheet: sheet.href || '内联样式表'
              }
            }, '*');
          }
        });
      });
    });
    // 监听样式表的子节点和属性变化
    observer.observe(sheet, { childList: true, subtree: true, attributes: true });
  });
`);

// 侧边栏配置同方案一
chrome.devtools.panels.elements.createSidebarPane("类规则修改日志", (sidebar) => {
  sidebar.setPage("sidebar.html");
});

注意事项

  • 调试协议方案更精准,能直接捕获DevTools中的修改操作;MutationObserver方案则能覆盖所有样式表的变化(包括页面脚本修改)。
  • 如果需要桌面通知,可在扩展中添加notifications权限,通过chrome.notifications.create发送提醒。

内容的提问来源于stack exchange,提问作者Grove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:44:59