npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

chrome-ext-inject-on-load

v1.0.0

Published

Module to enable Chrome extensions to inject content scripts on extension load.

Downloads

20

Readme

chrome-ext-inject-on-load

Module to enable Chrome extensions to inject content scripts on extension load.

Chrome does not inject content scripts as defined in the manifest on loading events (install, upgrade, toggle off/on, reload), unlike Firefox, and may require content scripts to be injected programmatically. This module enables you to setup this injection process with one line of code if you simply want to inject scripts just as specified in your manifest file.

Installation

To install the module, use npm:

npm install chrome-ext-inject-on-load

Usage

Import the module in your TypeScript file:

import { registerContentScriptInjectOnLoad } from 'chrome-ext-inject-on-load';

// Should be called when running background script.
registerContentScriptInjectOnLoad();

In your manifest file, make sure to include the permissions:

{
  "permissions": ["tabs", "scripting"],
  "host_permissions": [
    /* list of urls matching content scripts matches */
  ]
}

Demo

See demo for an example extension and live test.

How it works

The module performs content script injection in several steps:

  1. Activation Process

    • Binds to background service worker's activate event i.e. 'load', which fires once when extension is:
      • Installed
      • Updated
      • Toggled off/on
      • Reloaded (either in UI or programatically)
  2. Reads Manifest and Filters Tabs

    • Upon activation, reads the manifest
    • Iterates over all content_scripts selects tabs based on:
      • Matching the matches content script property
      • NOT matching the exclude_matches content script property
      • Matching the host_permissions extension property
      • Excludes sensitive URLs (chrome://, about:blank)
      • Excludes unloaded tabs (which Chrome would inject on reload anyway)
      • NOTE: Does not currently support include_globs or exclude_globs
  3. Injection

    • Iterates over every content_scripts entry and filtered tabs
    • Injects CSS first and then JavaScript second
    • Respects all_frames and world content_script settings
    • Waits for injection to complete before continuing to next scripts

License

This project is licensed under the MIT License.