Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

tabs.executeScript()

Fügt JavaScript-Code in eine Seite ein.

Hinweis: Verwenden Sie bei Manifest V3 oder höher scripting.executeScript(), um Skripte auszuführen.

Sie können Code in Seiten einfügen, deren URL sich mit einem Match-Pattern beschreiben lässt. Das Schema muss dabei http, https oder file sein.

Sie benötigen eine Berechtigung für die URL der Seite: entweder ausdrücklich als Host-Berechtigung oder über die activeTab-Berechtigung.

Erweiterungen können keine Content-Skripte in Erweiterungsseiten ausführen. Wenn eine Erweiterung Code dynamisch in einer Erweiterungsseite ausführen möchte, kann sie ein Skript in das Dokument einbinden. Dieses Skript enthält den auszuführenden Code und registriert einen runtime.onMessage-Listener, über den der Code ausgeführt werden kann. Die Erweiterung kann dann eine Nachricht an den Listener senden, um die Ausführung des Codes auszulösen.

Hinweis: Die Möglichkeit, Code in Seiten einzufügen, die mit Ihrer Erweiterung ausgeliefert werden, wurde in Firefox 149 als veraltet eingestuft und in Firefox 152 entfernt.

Die Skripte, die Sie einfügen, heißen Content-Skripte.

Syntax

js
let executing = browser.tabs.executeScript(
  tabId,                 // optional integer
  details                // object
)

Parameter

tabId Optional

integer. Die ID des Tabs, in dem das Skript ausgeführt werden soll.

Standardmäßig wird der aktive Tab des aktuellen Fensters verwendet.

details

Ein Objekt, das das auszuführende Skript beschreibt.

Es enthält die folgenden Eigenschaften:

allFrames Optional

boolean. Wenn true, wird der Code in alle Frames der aktuellen Seite eingefügt.

Wenn der Wert true ist und frameId gesetzt wurde, tritt ein Fehler auf. (frameId und allFrames schließen sich gegenseitig aus.)

Wenn der Wert false ist, wird der Code nur in den obersten Frame eingefügt.

Der Standardwert ist false.

code Optional

string. Der einzufügende Code als Zeichenfolge.

Warnung: Verwenden Sie diese Eigenschaft nicht, um nicht vertrauenswürdige Daten in JavaScript einzufügen, da dies zu einem Sicherheitsproblem führen könnte.

file Optional

string. Pfad zu einer Datei mit dem einzufügenden Code.

  • In Firefox werden relative URLs, die nicht am Stammverzeichnis der Erweiterung beginnen, relativ zur URL der aktuellen Seite aufgelöst.
  • In Chrome werden diese URLs relativ zur Basis-URL der Erweiterung aufgelöst.

Damit dies browserübergreifend funktioniert, können Sie den Pfad als relative URL angeben, die am Stammverzeichnis der Erweiterung beginnt, zum Beispiel "/path/to/script.js".

frameId Optional

integer. Der Frame, in den der Code eingefügt werden soll.

Der Standardwert ist 0 (der oberste Frame).

matchAboutBlank Optional

boolean. Wenn true, wird der Code in eingebettete about:blank- und about:srcdoc-Frames eingefügt, sofern Ihre Erweiterung Zugriff auf deren übergeordnetes Dokument hat. In oberste about:-Frames kann der Code nicht eingefügt werden.

Der Standardwert ist false.

runAt Optional

extensionTypes.RunAt. Der früheste Zeitpunkt, zu dem der Code in den Tab eingefügt wird.

Der Standardwert ist "document_idle".

Rückgabewert

Eine Promise, die mit einem Array von Objekten erfüllt wird. Die Werte des Arrays repräsentieren das Ergebnis des Skripts in jedem Frame, in den es eingefügt wurde.

Das Ergebnis des Skripts ist der zuletzt ausgewertete Ausdruck. Dies entspricht ungefähr der Ausgabe (den Ergebnissen, nicht der Ausgabe von console.log()), die Sie erhalten würden, wenn Sie das Skript in der Web-Konsole ausführen. Betrachten Sie beispielsweise ein Skript wie dieses:

js
let foo = "my result";
foo;

Hier enthält das Ergebnisarray die Zeichenfolge "my result" als Element.

Die Ergebniswerte müssen sich mit dem Structured-Clone-Algorithmus kopieren lassen (siehe Algorithmus zum Kopieren von Daten).

Hinweis: Der letzte Ausdruck kann auch eine Promise sein. Diese Funktion wird jedoch von der Bibliothek webextension-polyfill nicht unterstützt.

Wenn ein Fehler auftritt, wird die Promise mit einer Fehlermeldung zurückgewiesen.

Beispiele

Dieses Beispiel führt einen einzeiligen Codeausschnitt im aktiven Tab aus:

js
function onExecuted(result) {
  console.log(`We made it green`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

const makeItGreen = 'document.body.style.border = "5px solid green"';

const executing = browser.tabs.executeScript({
  code: makeItGreen,
});
executing.then(onExecuted, onError);

Dieses Beispiel führt ein Skript aus einer Datei namens "content-script.js" aus, die mit der Erweiterung ausgeliefert wird. Das Skript wird im aktiven Tab ausgeführt, sowohl im Hauptdokument als auch in untergeordneten Frames:

js
function onExecuted(result) {
  console.log(`We executed in all subframes`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

const executing = browser.tabs.executeScript({
  file: "/content-script.js",
  allFrames: true,
});
executing.then(onExecuted, onError);

Dieses Beispiel führt ein Skript aus einer Datei namens "content-script.js" aus, die mit der Erweiterung ausgeliefert wird. Das Skript wird im Tab mit der ID 2 ausgeführt:

js
function onExecuted(result) {
  console.log(`We executed in tab 2`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

const executing = browser.tabs.executeScript(2, {
  file: "/content-script.js",
});
executing.then(onExecuted, onError);

Beispielerweiterungen

Browser-Kompatibilität

Hinweis: Diese API basiert auf Chromiums chrome.tabs-API. Diese Dokumentation wurde aus tabs.json im Chromium-Code abgeleitet.