如何为同一扩展名的manifest.json文件中的多个内容脚本指定不同的匹配模式

Ven*_*esh 10 javascript google-chrome google-chrome-extension

这是场景:

场景1: 我想根据URL域将不同的内容脚本注入不同的页面.

例如:将cs1.js内容脚本注入,www.a.com但将cs2.js内容脚本注入www.b.com.内容脚本cs1.js和cs2.js都是同一个chrome扩展的一部分.所以如何指定不同的匹配模式(在manifest.json文件中定义"content_scripts"时在"matches"部分下),这样一个脚本就是注入一页而另一页注入其他页面.

场景2: 我如何提及,如果在子域之下www.a.com,我希望将内容脚本注入域中的所有页面,除了 www.b.a.com(所有其他子域需要注入内容脚本).如何为此案例指定匹配模式.

提前致谢.

Chr*_*and 9

指定content_scriptsmanifest.json是有点限制的.虽然您可以指定不同的匹配模式,但只能让它执行一系列可能的文件.

要实现您的目标,您需要设置一个background_page可以解释页面URL的内容,并根据需要执行内容脚本.

三种不同的方法可能是:

  1. 使用清单content_scripts匹配所有可能的URL并执行简单的内容脚本以通过后台页面发送消息请求chrome.extension.sendRequest().后台页面侦听消息chrome.extension.onRequest.addListener(),接收消息,解释选项卡的URL sender.tab.url(或者发送选项卡的消息window.location.hostname,可能更容易),然后决定通过选项卡注入哪些内容脚本chrome.tabs.executeScript().
     
    要么

  2. 只需要background_page监听chrome.tabs.onCreated.addListener()chrome.tabs.onUpdated.addListener()获取选项卡的URL,然后决定通过选项卡注入哪些内容脚本chrome.tabs.executeScript().无需content_scripts在清单中为此指定.  
     
    要么

  3. 与1类似,但让您的清单content_scripts脚本根据当前URL确定要做什么(再次可以解释window.location.hostname),然后使用chrome.extension.sendRequest()消息background_page说明要执行哪些内容脚本(意味着您background_page没有决定 - 原始内容脚本一样).但结果相同.

  • 实际上,我是不正确的.您*可以*具有不同的匹配问题,以及执行的不同脚本.只需将另一个对象添加到`content_scripts`数组中,根据需要添加一组不同的`matches`和`js`等. (9认同)