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

时间:2013-11-15 05:12:21

标签: javascript google-chrome google-chrome-extension

所以,我正在努力制作一个仅适用于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。

所有这些都在background.js。

中运行

2 个答案:

答案 0 :(得分:0)

the docs 不是很清楚,但是(可能是错误或功能)主机匹配模式可以在清单的permissions属性中声明,但不是关心路径:

"[scheme]:[host]/*"

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


由于 you seem 以编程方式注入,您可以手动根据路径进行过滤:

/* 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/”权限,这可以同样有效,但包含它会更有效,因为它会减少您的背景网址数量页面必须检查(和拒绝)。即它只需要检查以“http://www.google.com/

开头的网址

答案 1 :(得分:0)

我知道这是一个老问题,但这经过长时间的追捕帮助了我......(╭ರ_•)

您可以在清单文件的"content_scripts"中添加文件,并使用其"matches"属性,就像编写"permissions"网址一样。然后refine your content script matches使用其"exclude_matches""exclude_globs""include_globs"属性(其中“globs”是您要包含或排除的网址的一部分)。所以:

  "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完成后立即注入文件,但在加载图像和帧之类的子资源之前(根​​据上面的链接)。希望这有助于某人!