0

因此,我正在尝试制作一个仅适用于 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 中运行。

4

2 回答 2

0

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

"[scheme]:[host]/*"

它只适用于schemeandhost并且会忽略该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/ ”开头的网址

于 2013-11-15T08:39:36.913 回答
0

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

您可以将文件添加"content_scripts"到清单文件中,并使用其"matches"属性,就像编写"permissions"URL 一样。然后使用它的,和属性优化你的内容脚本匹配(其中“globs”是你想要包含或排除的 URL 片段)。所以:"exclude_matches""exclude_globs""include_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 完成后立即注入 so 文件,但在加载图像和框架等子资源之前(根​​据上面的链接)。希望这对某人有帮助!

于 2017-12-21T02:58:21.243 回答