Chrome 扩展程序适用于比应有的更多网址

Chrome Extension applying to more URLs than it should be

本文关键字:扩展 程序 适用于 Chrome      更新时间:2023-09-26

所以,我正在尝试做一个扩展,它只适用于它的 www.google.com/bbb 和子页面,比如 www.google.com/bbb/ccc,而不是 www.google.com/aaa。

我的清单具有以下权限:

  "permissions": ["tabs", "http://www.google.com/bbb*"],

但它仍然适用于 www.google.com 下的任何页面,而不仅仅是我想要的 www.google.com/bbb。

所有这些都在后台运行.js。

文档中不是很清楚,但是(无论是错误还是功能)可以在清单的 permissions 属性中声明的主机匹配模式并不关心路径:

"[scheme]:[host]/*"

它仅适用于schemehost,并将忽略path部分。


由于您似乎是按语法方式注入的,因此您可以手动根据路径进行过滤:

/* In `manifest.json` */
...
"permissions": [
    "tabs", 
    "http://www.google.com/"
],
...
/* In `background.js` */
// ...some event was captured, involving tab <tabX>...
...
var urlRegex = /^http:'/'/www.google.com/bbb/;
if (urlRegex.test(tabX.url)) {
    injectCSS(tabX.id);
}   // ...else do not inject CSS
...

注意:如果没有"http://www.google.com/"权限,这同样可以很好地工作,但包括它更有效,因为它减少了后台页面必须检查(和拒绝)的URL数量。 即它只需要检查以"http://www.google.com/"开头的 URL。

我知道

这是一个古老的问题,但经过长时间的狩猎,这对我有帮助......(╭ರ_•́)

您可以在清单文件"content_scripts"添加文件,并使用其 "matches" 属性,就像编写 "permissions" URL 一样。然后使用内容脚本的 "exclude_matches""exclude_globs""include_globs" 属性(其中"globs"是要包含或排除的 URL 片段)优化内容脚本匹配项。所以:

  "content_scripts": [
    {
      "matches": [
        "http://www.google.com/bbb/*"
      ],
      "js": [
        "src/inject/your_scripts.js"
      ],
      "css": [
        "src/inject/your_styles.css"
      ],
      "run_at": "document_end"
    }
  ],

请记住,要实现您的示例,您需要"run_at": "document_end"以便文件在 DOM 完成后立即注入,但在加载图像和帧等子资源之前(如上面的链接)。希望这对某人有所帮助!