How to specify different match patterns for multiple content scripts in the manifest.json file of the same extension
Here is the scenario:
Scenario 1: I want to inject different content scripts into different pages based on the URL Domain.
For ex: Inject cs1.js
content script into www.a.com
but inject 开发者_Python百科cs2.js
content script into www.b.com
.
Both the content scripts cs1.js and cs2.js are part of the same chrome extension.So how can I specify different match patterns ( under "matches" section while defining "content_scripts" in the manifest.json file ) so that one script is injected in one page while other is injected in other page.
Scenario 2:
How can I mention, if under a subdomain of say www.a.com
, I wish to inject the content script into all pages in the domain except www.b.a.com
( all other subdomains need to be injected with the content script ). How do I specify match pattern for this case.
Thanks in advance.
Specifying the content_scripts
within manifest.json is a bit limiting. Although you can specify different match patterns, you can only have it execute one possible slew of files.
To achieve what you want, you'll need to set up a background_page
that can interpret page URLs, and execute content scripts as you see fit.
Three different methods might be:
Use the manifest's
content_scripts
to match all possible URLs and execute a simple content script to send a message request to the background page viachrome.extension.sendRequest()
. The background page listens for messages withchrome.extension.onRequest.addListener()
, receives the message, interprets the tab's URL withsender.tab.url
(or have the tab's message sendwindow.location.hostname
, probably easier), then decides what content scripts to inject to the tab viachrome.tabs.executeScript()
.
orJust have your
background_page
listen forchrome.tabs.onCreated.addListener()
andchrome.tabs.onUpdated.addListener()
to get a tab's URL, then decide what content scripts to inject to the tab viachrome.tabs.executeScript()
. No need to specifycontent_scripts
in the manifest for this.
orSimilar to 1, but have your manifest
content_scripts
script figure out what to do based on the current URL (again could interpretwindow.location.hostname
), then usechrome.extension.sendRequest()
with a message for yourbackground_page
stating which content scripts to execute (meaning yourbackground_page
doesn't decide - the original content script does). Same result though.
Meanwhile szenario 1 can be solved: You can inject different content scripts into different pages this way:
"content_scripts":
[{
"run_at": "document_end",
"js": [
"cs1.js"
],
"matches": [
"https://www.a.com/*"
]
},
{
"run_at": "document_end",
"js": [
"cs2.js"
],
"matches": [
"https://www.b.com/*"
]
}],
Hope this answear helps for the initial question.
http://code.google.com/chrome/extensions/content_scripts.html#include-exclude-globs
Does this help at all?
精彩评论