webext-content-scripts 
Utility functions to inject content scripts from a WebExtension.
Tested in Chrome, Firefox, and Safari.
Sponsored by PixieBrix :tada:
Install
You can download the standalone bundle and include it in your manifest.json
. Or use npm:
npm install webext-content-scripts
import {injectContentScript, executeFunction} from 'webext-content-scripts';
Usage
injectContentScript(tabId, scripts)
injectContentScript({tabId, frameId}, scripts)
Like chrome.tabs.executeScript
and chrome.tabs.injectCSS
but with the same API as the manifest, so you can inject multiple JS and CSS at once. It accepts either an object or an array of objects.
const tabId = 42;
await injectContentScript(tabId, {
run_at: 'document_idle',
all_frames: true,
match_about_blank: true,
js: [
'contentscript.js'
],
css: [
'style.css'
],
})
await injectContentScript({
tabId: 42,
frameId: 56
}, [
{
js: [
'jquery.js',
'contentscript.js'
],
css: [
'bootstrap.css',
'style.css'
],
},
{
run_at: 'document_start',
css: [
'more-styles.css'
],
}
])
executeFunction(tabId, function, ...arguments)
executeFunction({tabId, frameId}, function, ...arguments)
Like chrome.tabs.executeScript
, except that it accepts a raw function to be executed in the chosen tab.
const tabId = 10;
const tabUrl = await executeFunction(tabId, () => {
alert('This code is run as a content script');
return location.href;
});
console.log(tabUrl);
Note: The function must be self-contained because it will be serialized.
const tabId = 10;
const catsAndDogs = "cute";
await executeFunction(tabId, () => {
console.log(catsAndDogs);
});
you must pass it as arguments:
const tabId = 10;
const catsAndDogs = "cute";
await executeFunction(tabId, (localCatsAndDogs) => {
console.log(localCatsAndDogs);
}, catsAndDogs);
Related
License
MIT © Federico Brigante