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

如何在特定站点禁用Chrome扩展?Manifest与正则配置报错求助

解决Chrome扩展在特定站点禁用/排除注入的问题

我来帮你一步步解决这两个问题,同时给出最佳实践方案:

一、修复Content Script的exclude_matches报错

你遇到的Empty path错误,是因为Chrome的匹配规则要求exclude_matches的每一项必须包含路径部分,不能只写主机名。把你的规则改成下面这样就行:

"content_scripts": [{
  "matches": ["<all_urls>"],
  "exclude_matches": ["*://*.pannus.*/*"],
  "js": ["content.js"],
  "css": [ "style.css" ]
}]

这里的/*表示匹配该域名下的任意路径,这样就符合Chrome的格式要求了,Content Script就不会注入到所有包含.pannus.的站点里。

二、修复PageStateMatcher的正则表达式错误

Chrome的declarativeContent.PageStateMatcher使用的是RE2正则引擎,它不支持Perl风格的负向前瞻(?!...)语法。你不需要用复杂的负前瞻,直接用urlDoesNotMatch来反向匹配更简单:

chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
  chrome.declarativeContent.onPageChanged.addRules([{
    conditions: [
      new chrome.declarativeContent.PageStateMatcher({
        pageUrl: { 
          schemes: ['https', 'http'], 
          urlDoesNotMatch: '\\.pannus\\.' 
        },
      })
    ],
    actions: [new chrome.declarativeContent.ShowPageAction()]
  }]);
});

注意这里要把.转义成\\.,因为正则里.是通配符,我们要匹配字面量的点。这样配置后,Browser Action只会在不包含.pannus.的站点显示。

三、最佳实践方案

如果你的需求是既不注入Content Script,又不在目标站点显示Browser Action,建议把两种方式结合起来:

  1. 用content_scripts的exclude_matches(正确格式)阻止脚本注入,这是最直接的方式,避免不必要的资源加载。
  2. 用declarativeContent的规则控制Browser Action的显示,提升用户体验,让用户清楚扩展在当前站点是否生效。

另外,如果你后续升级到Manifest V3(你当前用的是V2),逻辑类似,只是browser_action改成了action,background的写法略有不同,但匹配规则和正则限制是一致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:56:27