Skip to content

API > wxt/client > ContentScriptContext

Class: ContentScriptContext

Implements AbortController. Used to detect and stop content script code when the script is invalidated.

It also provides several utilities like ctx.setTimeout and ctx.setInterval that should be used in content scripts instead of window.setTimeout or window.setInterval.

To create context for testing, you can use the class's constructor:

ts
import { ContentScriptContext } from 'wxt/client';

test("storage listener should be removed when context is invalidated", () => {
  const ctx = new ContentScriptContext('test');
  const item = storage.defineItem("local:count", { defaultValue: 0 });
  const watcher = vi.fn();

  const unwatch = item.watch(watcher);
  ctx.onInvalidated(unwatch); // Listen for invalidate here

  await item.setValue(1);
  expect(watcher).toBeCalledTimes(1);
  expect(watcher).toBeCalledWith(1, 0);

  ctx.notifyInvalidated(); // Use this function to invalidate the context
  await item.setValue(2);
  expect(watcher).toBeCalledTimes(1);
});

Contents

Implements

  • AbortController

Constructors

new ContentScriptContext(contentScriptName, options)

new ContentScriptContext(contentScriptName, options?): ContentScriptContext

Parameters

contentScriptName: string

options?: Omit<ContentScriptDefinition, "main">

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:46

Properties

abortController

private abortController: AbortController

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:43


contentScriptName

private readonly contentScriptName: string

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:47


isTopFrame

private isTopFrame: boolean

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:42


locationWatcher

private locationWatcher: object

Type declaration

run()

Ensure the location watcher is actively looking for URL changes. If it's already watching, this is a noop.

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:44


options

readonly options?: Omit<ContentScriptDefinition, "main">

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:48


SCRIPT_STARTED_MESSAGE_TYPE

private static SCRIPT_STARTED_MESSAGE_TYPE: string

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:38

Accessors

isInvalid

get isInvalid(): boolean

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:68


isValid

get isValid(): boolean

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:75


signal

get signal(): AbortSignal

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:60

Methods

abort()

abort(reason?): void

Parameters

reason?: any

Implementation of

AbortController.abort

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:64


addEventListener()

addEventListener(target, type, handler, options)

addEventListener<TType>(target, type, handler, options?): void

Call target.addEventListener and remove the event listener when the context is invalidated.

Includes additional events useful for content scripts:

  • "wxt:locationchange" - Triggered when HTML5 history mode is used to change URL. Content scripts are not reloaded when navigating this way, so this can be used to reset the content script state on URL change, or run custom code.
Type parameters

TType extends keyof WxtWindowEventMap

Parameters

target: Window

type: TType

handler: (event) => void

options?: AddEventListenerOptions

Returns
Example
ts
ctx.addEventListener(document, "visibilitychange", () => {
  // ...
});
ctx.addEventListener(window, "wxt:locationchange", () => {
  // ...
});
Source

packages/wxt/src/client/content-scripts/content-script-context.ts:182

addEventListener(target, type, handler, options)

addEventListener<TType>(target, type, handler, options?): void

Type parameters

TType extends keyof DocumentEventMap

Parameters

target: Document

type: keyof DocumentEventMap

handler: (event) => void

options?: AddEventListenerOptions

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:188

addEventListener(target, params)

addEventListener<TTarget>(target, ...params): void

Type parameters

TTarget extends EventTarget

Parameters

target: TTarget

▪ ...params: Parameters<TTarget["addEventListener"]>

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:194


block()

block<T>(): Promise<T>

Return a promise that never resolves. Useful if you have an async function that shouldn't run after the context is expired.

Type parameters

T

Returns

Example

ts
const getValueFromStorage = async () => {
  if (ctx.isInvalid) return ctx.block();

  // ...
}

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:108


listenForNewerScripts()

listenForNewerScripts(options?): void

Parameters

options?: object

options.ignoreFirstEvent?: boolean

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:241


notifyInvalidated()

notifyInvalidated(): void

Abort the abort controller and execute all onInvalidated listeners.

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:223


onInvalidated()

onInvalidated(cb): () => void

Add a listener that is called when the content script's context is invalidated.

Parameters

cb: () => void

Returns

A function to remove the listener.

(): void

Add a listener that is called when the content script's context is invalidated.

Returns

A function to remove the listener.

Example
ts
browser.runtime.onMessage.addListener(cb);
const removeInvalidatedListener = ctx.onInvalidated(() => {
browser.runtime.onMessage.removeListener(cb);
})
// ...
removeInvalidatedListener();
Source

packages/wxt/src/client/content-scripts/content-script-context.ts:92

Example

ts
browser.runtime.onMessage.addListener(cb);
const removeInvalidatedListener = ctx.onInvalidated(() => {
  browser.runtime.onMessage.removeListener(cb);
})
// ...
removeInvalidatedListener();

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:92


requestAnimationFrame()

requestAnimationFrame(callback): number

Wrapper around window.requestAnimationFrame that automatically cancels the request when invalidated.

Parameters

callback: FrameRequestCallback

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:140


requestIdleCallback()

requestIdleCallback(callback, options?): number

Wrapper around window.requestIdleCallback that automatically cancels the request when invalidated.

Parameters

callback: IdleRequestCallback

options?: IdleRequestOptions

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:153


setInterval()

setInterval(handler, timeout?): number

Wrapper around window.setInterval that automatically clears the interval when invalidated.

Parameters

handler: () => void

timeout?: number

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:117


setTimeout()

setTimeout(handler, timeout?): number

Wrapper around window.setTimeout that automatically clears the interval when invalidated.

Parameters

handler: () => void

timeout?: number

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:128


stopOldScripts()

stopOldScripts(): void

Source

packages/wxt/src/client/content-scripts/content-script-context.ts:230


Generated using typedoc-plugin-markdown and TypeDoc