为chrome扩展中的内容脚本动态配置exclude_matches

时间:2012-04-16 09:56:17

标签: google-chrome google-chrome-extension

对于Chrome扩展程序中的内容脚本,您可以指定matchesexclude_matches来控制它们注入的页面。这必须在扩展名的清单中指定,如此

{
  "name": "Color picker",
  ...
  "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "exclude_matches": ["http://www.google.com/*"],
      "css": ["color_picker.css"],
      "js": ["jquery.js", "color_picker.js"]
    }
  ],
  ...
}

我想知道是否可以在使用扩展程序时将["http://www.yahoo.com/*"],添加到exclude_matches。这样,我可以允许用户控制exclude_matches

2 个答案:

答案 0 :(得分:8)

扩展程序无法修改任何本地文件,包括扩展程序manifest.json。 Chrome为optional permissions提供了API,但不包括Content scripts

您可以手动创建灵活的模式:

// In the content script:
var exclude = /^https?:\/\/(www\.)?yahoo\.com\//;
if (!exclude.test(location.href)) {
     // Run logic.
}

正则表达式非常强大,但并非必要。可以使用其他location.href属性,而不是location,而不是location.host

另请参阅:MDN: window.location

答案 1 :(得分:2)

您可以将exclude_matches视为对您的扩展必须从不做的“硬”限制 - 简而言之,它设置内容脚本不应包含哪些类型页面的永久界限触摸。没有办法动态修改它,因为它是永久性的。

但是,如果要使其灵活,则需要以编程方式进行注射。 Google已documentation了解如何使用executeScript执行此操作。您需要使用用户控制的列表添加自己的排除逻辑(并使用其他答案的好建议)。