Reputation: 358
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 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.
Upvotes: 13
Views: 5824
Reputation: 111
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.
Upvotes: 1
Reputation: 6169
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 via chrome.extension.sendRequest()
. The background page listens for messages with chrome.extension.onRequest.addListener()
, receives the message, interprets the tab's URL with sender.tab.url
(or have the tab's message send window.location.hostname
, probably easier), then decides what content scripts to inject to the tab via chrome.tabs.executeScript()
.
or
Just have your background_page
listen for chrome.tabs.onCreated.addListener()
and chrome.tabs.onUpdated.addListener()
to get a tab's URL, then decide what content scripts to inject to the tab via chrome.tabs.executeScript()
. No need to specify content_scripts
in the manifest for this.
or
Similar to 1, but have your manifest content_scripts
script figure out what to do based on the current URL (again could interpret window.location.hostname
), then use chrome.extension.sendRequest()
with a message for your background_page
stating which content scripts to execute (meaning your background_page
doesn't decide - the original content script does). Same result though.
Upvotes: 9
Reputation: 3531
http://code.google.com/chrome/extensions/content_scripts.html#include-exclude-globs
Does this help at all?
Upvotes: 0