Security & Privacy

JS Injector is designed with security and privacy as core principles.

Privacy Policy

Last updated: July 2026

Single Purpose

This extension allows users to inject custom JavaScript and CSS into web pages to customize and automate their browsing experience.

JS Injector does not collect, transmit, or sell any personal data. All user data (scripts, settings, preferences) is stored locally in the browser using the chrome.storage.local / browser.storage.local API.

What We Don't Do

  • We do not collect browsing history
  • We do not track user behavior
  • We do not send data to external servers
  • We do not use analytics or telemetry
  • We do not display advertisements
  • We do not monetize user data in any way
  • We do not transfer data to third parties
  • We do not use data for advertising

What We Store Locally

  • Scripts — your JavaScript and CSS code
  • Settings — editor preferences, theme, language
  • GM API data — key-value pairs stored by user scripts via GM_setValue

All of this data stays on your device and is never transmitted anywhere.

Data Collection

JS Injector collects zero data. There are no servers, no analytics, no phone-home calls.

The only network requests made by the extension are:

  • User-initiated — when you import a script from a URL
  • GM_xmlhttpRequest — when a user script makes an HTTP request (proxied through the extension to bypass CORS)

Both of these are explicitly triggered by the user, not by the extension itself.

Permissions Explained

Each permission the extension requests has a specific, documented purpose:

PermissionPurposeScope
storageStore scripts and settingsLocal only
activeTabInject into current tab on demandActive tab only
scriptingExecute scripts via executeScript APIWhen triggered
contextMenusRight-click menu itemsExtension menu only
webNavigationDetect page loads for auto-injectionURL matching only
sidePanelOpen the side panel editorOn user action
<all_urls>Match patterns for script injectionPer-script patterns

The <all_urls> host permission is required for the extension to inject scripts into any website. However, scripts only run on URLs that match their specific patterns — not on all sites.

Script Security

JS Injector executes user-provided JavaScript code. This is the core functionality of the extension. Users should be aware of the following:

Imported Scripts

When importing scripts from external sources (JSON files, URLs, .user.js files), you are executing code written by others. Always review the code before importing.

GM API Access

Scripts with @grant permissions can access the GM API, which provides:

  • Persistent storage (GM_setValue/GM_getValue)
  • Cross-origin HTTP requests (GM_xmlhttpRequest)
  • Clipboard access (GM_setClipboard)
  • Desktop notifications (GM_notification)

Only grant permissions that your scripts actually need.

Best Practices

  • Review code before importing scripts from others
  • Use specific match patterns instead of *://*/*
  • Only grant GM API permissions you actually need
  • Keep scripts minimal and focused
  • Regularly audit your installed scripts

Remote Code Policy

JS Injector does not load, fetch, or execute any remotely hosted code. All extension code is bundled within the extension package and reviewed by browser stores before publication.

User scripts are stored locally using chrome.storage.local and executed via chrome.scripting.executeScript(). The extension does not use eval() on remote content and does not include any analytics, tracking, or telemetry code.

The only network requests made by the extension are:

  • User-initiated imports — when the user explicitly provides a URL to import a script
  • GM_xmlhttpRequest — when a user script makes an HTTP request (proxied through the extension to bypass CORS, only when explicitly triggered by a user script)

Content Security Policy

JS Injector uses the scripting.executeScript API with world: 'MAIN' to inject scripts. This bypasses the page's Content Security Policy (CSP) because the injection happens at the browser extension level, not through inline script tags.

The extension's own CSP is:

script-src 'self'; object-src 'self'

This means the extension can only execute scripts that are part of its own package. No remote code execution is possible within the extension itself.

Open Source

JS Injector is open-source. The full source code is available for review, audit, and contribution.

Anyone can inspect the code to verify that:

  • No data is collected or transmitted
  • No tracking or analytics are present
  • No remote code is loaded
  • Permissions are used only as documented

Report a Vulnerability

If you discover a security vulnerability in JS Injector, please report it responsibly:

We take security seriously and will respond to reports within 48 hours.