JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2198
  • Score
    100M100P100Q125134F
  • License MIT

Utility functions to inject content scripts from a WebExtension.

Package Exports

  • webext-content-scripts

Readme

webext-content-scripts npm version

Utility functions to inject content scripts from a WebExtension.

Tested in Chrome, Firefox, and Safari.

Sponsored by PixieBrix 🎉

Install

You can download the standalone bundle and include it in your manifest.json. Or use npm:

npm install webext-content-scripts
// This module is only offered as a ES Module
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); // ERROR: catsAndDogs will be undeclared and will throw an error
});

you must pass it as arguments:

const tabId = 10;
const catsAndDogs = "cute";

await executeFunction(tabId, (localCatsAndDogs) => {
    console.log(localCatsAndDogs); // It logs "cute"
}, catsAndDogs); // Argument

License

MIT © Federico Brigante