A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.chrome.com/docs/extensions/reference/api/userScripts below:

chrome.userScripts | API | Chrome for Developers

chrome.userScripts

Stay organized with collections Save and categorize content based on your preferences.

Description

Use the userScripts API to execute user scripts in the User Scripts context.

Permissions

userScripts

To use the User Scripts API, chrome.userScripts, add the "userScripts" permission to your manifest.json and "host_permissions" for sites you want to run scripts on.

{
  "name": "User script test extension",
  "manifest_version": 3,
  "minimum_chrome_version": "120",
  "permissions": [
    "userScripts"
  ],
  "host_permissions": [
    "*://example.com/*"
  ]
}
Availability Concepts and usage

A user script is a snippet of code injected into a web page to modify its appearance or behavior. Unlike other extension features, such as Content Scripts and the chrome.scripting API, the User Scripts API lets you run arbitrary code. This API is required for extensions that run scripts provided by the user that cannot be shipped as part of your extension package.

Enable usage of the userScripts API

After your extension receives the permission to use the userScripts API, users must enable a specific toggle to allow your extension to use the API. The specific toggle required, and the API's behavior when disabled, vary by Chrome version.

Use the following check to determine which toggle the user needs to enable, for example, during new user onboarding:

let version = Number(navigator.userAgent.match(/(Chrome|Chromium)\/([0-9]+)/)?.[2]);
if (version >= 138) {
  // Allow User Scripts toggle will be used.
} else {
  // Developer mode toggle will be used.
}

The following sections describe the different toggles and how to enable them.

Chrome versions prior to 138 (Developer mode toggle)

AAs an extension developer, you already have Developer mode enabled in your installation of Chrome. Your users must also enable Developer mode.

You can copy and paste the following instructions into your extension's documentation for your users

  1. Go to the Extensions page by entering chrome://extensions in a new tab. (By design chrome:// URLs are not linkable.)
  2. Enable Developer Mode by clicking the toggle switch next to Developer mode.

    Extensions page (chrome://extensions)
Note: If Developer mode is not enabled, accessing chrome.userScripts shows an error. You can use this error to determine API availability, see Check for API availability. Chrome versions 138 and newer (Allow User Scripts toggle)

The Allow User Scripts toggle is on each extension's details page (for example, chrome://extensions/?id=YOUR_EXTENSION_ID).

You can copy and paste the following instructions into your extension's documentation for your users:

  1. Go to the Extensions page by entering chrome://extensions in a new tab. (By design chrome:// URLs are not linkable.)
  2. Click the "Details" button on the extension card to view detailed information about the extension.
  3. Click the toggle switch next to Allow User Scripts.
Allow User Scripts toggle (chrome://extensions/?id=abc...) Note: If the Allow User Scripts toggle is not enabled, chrome.userScripts is undefined. This undefined state (similar to how other APIs behave) only resets when an extension script context reloads. For example, if a user revokes access while your service worker is running, chrome.userScripts remains defined. However, in this scenario, attempting to call any of its methods throws an error. Check for API availability

We recommend the following check to determine if the userScripts API is enabled, as it works in all Chrome versions. This check attempts to call a chrome.userScripts() method that should always succeed when the API is available. If this call throws an error, the API is not available:

function isUserScriptsAvailable() {
  try {
    // Method call which throws if API permission or toggle is not enabled.
    chrome.userScripts.getScripts();
    return true;
  } catch {
    // Not available.
    return false;
  }
}
Work in isolated worlds

Both user and content scripts can run in an isolated world or in the main world. An isolated world is an execution environment that isn't accessible to a host page or other extensions. This lets a user script change its JavaScript environment without affecting the host page or other extensions' user and content scripts. Conversely, user scripts (and content scripts) are not visible to the host page or the user and content scripts of other extensions. Scripts running in the main world are accessible to host pages and other extensions and are visible to host pages and to other extensions. To select the world, pass "USER_SCRIPT" or "MAIN" when calling userScripts.register().

To configure a content security policy for the USER_SCRIPT world, call userScripts.configureWorld():

chrome.userScripts.configureWorld({
  csp: "script-src 'self'"
});
Messaging

Like content scripts and offscreen documents, user scripts communicate with other parts of an extension using messaging (meaning they can call runtime.sendMessage() and runtime.connect() as any other part of an extension would). However, they're received using dedicated event handlers (meaning, they don't use onMessage or onConnect). These handlers are called runtime.onUserScriptMessage and runtime.onUserScriptConnect. Dedicated handlers make it easier to identify messages from user scripts, which are a less-trusted context.

Before sending a message, you must call configureWorld() with the messaging argument set to true. Note that both the csp and messaging arguments can be passed at the same time.

chrome.userScripts.configureWorld({
  messaging: true
});
Extension updates

User scripts are cleared when an extension updates. You can add them back by running code in the runtime.onInstalled event handler in the extension service worker. Respond only to the "update" reason passed to the event callback.

Example

This example is from the userScript sample in our samples repository.

Register a script

The following example shows a basic call to register(). The first argument is an array of objects defining the scripts to be registered. There are more options than are shown here.

chrome.userScripts.register([{
  id: 'test',
  matches: ['*://*/*'],
  js: [{code: 'alert("Hi!")'}]
}]);
Types

ExecutionWorld

The JavaScript world for a user script to execute within.

Enum

"MAIN"
Specifies the execution environment of the DOM, which is the execution environment shared with the host page's JavaScript.

"USER_SCRIPT"
Specifies the execution environment that is specific to user scripts and is exempt from the page's CSP.

Properties Properties Properties Properties Properties Properties Properties Methods

configureWorld()

chrome.userScripts.configureWorld(
  properties: WorldProperties,
)
: Promise<void>

Configures the `USER_SCRIPT` execution environment.

Parameters

execute()

chrome.userScripts.execute(
  injection: UserScriptInjection,
)
: Promise<InjectionResult[]>

Injects a script into a target context. By default, the script will be run at document_idle, or immediately if the page has already loaded. If the injectImmediately property is set, the script will inject without waiting, even if the page has not finished loading. If the script evaluates to a promise, the browser will wait for the promise to settle and return the resulting value.

Parameters

getWorldConfigurations()

chrome.userScripts.getWorldConfigurations(): Promise<WorldProperties[]>

Retrieves all registered world configurations.

register()

chrome.userScripts.register(
  scripts: RegisteredUserScript[],
)
: Promise<void>

Registers one or more user scripts for this extension.

Parameters

resetWorldConfiguration()

chrome.userScripts.resetWorldConfiguration(
  worldId?: string,
)
: Promise<void>

Resets the configuration for a user script world. Any scripts that inject into the world with the specified ID will use the default world configuration.

Parameters

unregister()

chrome.userScripts.unregister(
  filter?: UserScriptFilter,
)
: Promise<void>

Unregisters all dynamically-registered user scripts for this extension.

Parameters

update()

chrome.userScripts.update(
  scripts: RegisteredUserScript[],
)
: Promise<void>

Updates one or more user scripts for this extension.

Parameters

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-08-11 UTC.

[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-11 UTC."],[],[]]


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4