////////////////////////////////////////////////////// // BEWARE: DO NOT EDIT MANUALLY! Changes will be lost! ////////////////////////////////////////////////////// import { ExtensionTypes } from "./extensionTypes"; import { Manifest } from "./manifest"; /** * Namespace: browser.scripting */ export namespace Scripting { /** * Details of a script injection */ interface ScriptInjection { /** * The arguments to curry into a provided function. This is only valid if the func parameter is specified. * These arguments must be JSON-serializable. * Optional. */ args?: unknown[]; /** * The path of the JS files to inject, relative to the extension's root directory. Exactly one of files * and func must be specified. * Optional. */ files?: string[]; /** * A JavaScript function to inject. This function will be serialized, and then deserialized for injection. * This means that any bound parameters and execution context will be lost. Exactly one of files and * func must be specified. * * @param ...args The arguments * @returns The return value */ func?(...args: unknown[]): unknown; /** * Details specifying the target into which to inject the script. */ target: InjectionTarget; /** * Optional. */ world?: ExecutionWorld; /** * Whether the injection should be triggered in the target as soon as possible (but not necessarily prior to page load). * Optional. */ injectImmediately?: boolean; } /** * Result of a script injection. */ interface InjectionResult { /** * The frame ID associated with the injection. */ frameId: number; /** * The result of the script execution. * Optional. */ result?: unknown; /** * The error property is set when the script execution failed. The value is typically an (Error) * object with a message property, but could be any value (including primitives and undefined) * if the script threw or rejected with such a value. * Optional. */ error?: unknown; /** * Whether the script should inject into all frames within the tab. Defaults to false. * This must not be true if frameIds is specified. * Optional. */ allFrames?: boolean; } /** * Details of the script to insert. */ interface InjectionTarget { /** * The IDs of specific frames to inject into. * Optional. */ frameIds?: number[]; /** * Whether the script should inject into all frames within the tab. Defaults to false. * This must not be true if frameIds is specified. * Optional. */ allFrames?: boolean; /** * The ID of the tab into which to inject. */ tabId: number; } interface CSSInjection { /** * A string containing the CSS to inject. Exactly one of files and css must be specified. * Optional. */ css?: string; /** * The path of the CSS files to inject, relative to the extension's root directory. Exactly one of files * and css must be specified. * Optional. */ files?: string[]; /** * The style origin for the injection. Defaults to 'AUTHOR'. * Optional. */ origin?: CSSInjectionOriginEnum; /** * Details specifying the target into which to inject the CSS. */ target: InjectionTarget; } interface ContentScriptFilter { /** * The IDs of specific scripts to retrieve with getRegisteredContentScripts() or to unregister with * unregisterContentScripts(). * Optional. */ ids?: string[]; } /** * The JavaScript world for a script to execute within. ISOLATED is the default execution environment of * content scripts, MAIN is the web page's execution environment. */ type ExecutionWorld = "ISOLATED" | "MAIN"; interface RegisteredContentScript { /** * If specified true, it will inject into all frames, even if the frame is not the top-most frame in the tab. * Each frame is checked independently for URL requirements; it will not inject into child frames if the URL requirements * are not met. Defaults to false, meaning that only the top frame is matched. * Optional. */ allFrames?: boolean; /** * Excludes pages that this content script would otherwise be injected into. * Optional. */ excludeMatches?: string[]; /** * The id of the content script, specified in the API call. */ id: string; /** * The list of JavaScript files to be injected into matching pages. These are injected in the order they appear in this * array. * Optional. */ js?: Manifest.ExtensionURL[]; /** * Specifies which pages this content script will be injected into. Must be specified for registerContentScripts() * . * Optional. */ matches?: string[]; /** * If matchOriginAsFallback is true, then the code is also injected in about:, data:, * blob: when their origin matches the pattern in 'matches', even if the actual document origin is opaque (due to the use * of CSP sandbox or iframe sandbox). Match patterns in 'matches' must specify a wildcard path glob. By default it is * false. * Optional. */ matchOriginAsFallback?: boolean; /** * Specifies when JavaScript files are injected into the web page. The preferred and default value is * document_idle. * Optional. */ runAt?: ExtensionTypes.RunAt; /** * The JavaScript world for a script to execute within. Defaults to "ISOLATED". * Optional. */ world?: ExecutionWorld; /** * Specifies if this content script will persist into future sessions. This is currently NOT supported. * Optional. */ persistAcrossSessions?: boolean; /** * The list of CSS files to be injected into matching pages. These are injected in the order they appear in this array. * Optional. */ css?: Manifest.ExtensionURL[]; /** * Optional. */ cssOrigin?: ExtensionTypes.CSSOrigin; } /** * The origin for a style change. See style origins for more info. * * "AUTHOR": The author origin is the style origin which contains all of the styles which are part of the document, * whether embedded within the HTML or loaded from an external stylesheet file. * "USER": The user origin is the style origin containing any CSS that the user of the web browser has added. * These may be from adding styles using a developer tool or from a browser extension that automatically applies custom * styles to content, such as Stylus or Stylish. */ type StyleOrigin = "AUTHOR" | "USER"; /** * Details of the css to insert. */ interface CSSInjection { /** * A string containing the CSS to inject. Exactly one of files and css must be specified. * Optional. */ css?: string; /** * The path of the CSS files to inject, relative to the extension's root directory. NOTE: Currently a maximum of one file * is supported. Exactly one of files and css must be specified. * Optional. */ files?: string[]; /** * The style origin for the injection. Defaults to 'AUTHOR'. * Optional. */ origin?: StyleOrigin; /** * Details specifying the target into which to insert the CSS. */ target: InjectionTarget; } interface UpdateContentScriptsScriptsItemType extends RegisteredContentScript { /** * Specifies if this content script will persist into future sessions. * Optional. */ persistAcrossSessions?: boolean; } /** * The style origin for the injection. Defaults to 'AUTHOR'. */ type CSSInjectionOriginEnum = "USER" | "AUTHOR"; interface Static { /** * Injects a script into a target context. The script will be run at document_idle. * * @param injection The details of the script which to inject. * @returns Invoked upon completion of the injection. The resulting array contains the result of execution for each frame * where the injection succeeded. */ executeScript(injection: ScriptInjection): Promise; /** * Inserts a CSS stylesheet into a target context. If multiple frames are specified, unsuccessful injections are ignored. * * @param injection The details of the styles to insert. * @returns Invoked upon completion of the injection. */ insertCSS(injection: CSSInjection): Promise; /** * Removes a CSS stylesheet that was previously inserted by this extension from a target context. * * @param injection The details of the styles to remove. Note that the css, files, and * origin properties must exactly match the stylesheet inserted through insertCSS. * Attempting to remove a non-existent stylesheet is a no-op. * @returns Invoked upon completion of the injection. */ removeCSS(injection: CSSInjection): Promise; /** * Registers one or more content scripts for this extension. * * @param scripts Contains a list of scripts to be registered. If there are errors during script parsing/file validation, * or if the IDs specified already exist, then no scripts are registered. * @returns Invoked upon completion of the registration. */ registerContentScripts(scripts: RegisteredContentScript[]): Promise; /** * Returns all dynamically registered content scripts for this extension that match the given filter. * * @param filter Optional. An object to filter the extension's dynamically registered scripts. * @returns The resulting array contains the registered content scripts. */ getRegisteredContentScripts(filter?: ContentScriptFilter): Promise; /** * Unregisters one or more content scripts for this extension. * * @param filter Optional. If specified, only unregisters dynamic content scripts which match the filter. Otherwise, * all of the extension's dynamic content scripts are unregistered. * @returns Invoked upon completion of the unregistration. */ unregisterContentScripts(filter?: ContentScriptFilter): Promise; /** * Updates one or more content scripts for this extension. * * @param scripts Contains a list of scripts to be updated. If there are errors during script parsing/file validation, * or if the IDs specified do not already exist, then no scripts are updated. * @returns Invoked when scripts have been updated. */ updateContentScripts(scripts: UpdateContentScriptsScriptsItemType[]): Promise; } }