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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With