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: Bei Verwendung von Manifest V3 oder höher nutzen Sie scripting.executeScript(), um Skripte auszuführen.

Sie können Code in Seiten injizieren, deren URL Sie mithilfe eines Matchmusters ausdrücken können. Dazu muss das Schema eines der folgenden sein: http, https oder file.

Sie müssen eine Erlaubnis für die URL der Seite entweder explizit als Hostberechtigung oder mit der activeTab-Berechtigung haben. Beachten Sie, dass einige spezielle Seiten diese Berechtigung nicht zulassen, darunter Leseansicht, view-source, PDF-Viewer und andere integrierte Browser-UI-Seiten.

Erweiterungen können keine Inhalte-Skripte in Erweiterungsseiten ausführen. Wenn eine Erweiterung Code in einer Erweiterungsseite dynamisch ausführen möchte, kann sie ein Skript in das Dokument einfügen. Dieses Skript enthält den auszuführenden Code und registriert einen runtime.onMessage-Listener, der eine Methode zur Ausführung des Codes implementiert. Die Erweiterung kann dann eine Nachricht an den Listener senden, um die Ausführung des Codes zu starten.

Hinweis: Die Möglichkeit, Code in Seiten zu injizieren, die mit Ihrer Erweiterung verpackt sind, wurde in Firefox 149 abgekündigt und in Firefox 152 entfernt.

Die von Ihnen injizierten Skripte werden Content Scripts genannt.

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 der aktive Tab des aktuellen Fensters.

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 injiziert.

Wenn auf true gesetzt und frameId ist ebenfalls gesetzt, wird ein Fehler ausgelöst. (frameId und allFrames schließen sich gegenseitig aus.)

Wenn es false ist, wird der Code nur in den obersten Frame injiziert.

Standardwert ist false.

code Optional

string. Code, der als Textzeichenfolge injiziert werden soll.

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

file Optional

string. Pfad zu einer Datei, die den zu injizierenden Code enthält.

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

Um browserübergreifend zu arbeiten, können Sie den Pfad als relative URL angeben, beginnend am Stamm der Erweiterung, wie folgt: "/path/to/script.js".

frameId Optional

integer. Der Frame, in den der Code injiziert werden soll.

Standardwert ist 0 (das oberste Frame).

matchAboutBlank Optional

boolean. Wenn true, wird der Code in eingebettete about:blank und about:srcdoc Frames injiziert, wenn Ihre Erweiterung Zugang zu ihrem übergeordneten Dokument hat. Der Code kann nicht in oberste about: Frames eingefügt werden.

Standardwert ist false.

runAt Optional

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

Standardwert ist "document_idle".

Rückgabewert

Ein Promise, das in einem Array von Objekten aufgelöst wird. Die Werte des Arrays repräsentieren das Ergebnis des Skriptes in jedem injizierten Frame.

Das Ergebnis des Skriptes ist die zuletzt ausgewertete Anweisung, die dem Ausgabeverhalten (den Ergebnissen, nicht der Ausgabe von console.log()) ähnelt, wenn Sie das Skript in der Web-Konsole ausgeführt haben. Zum Beispiel könnte ein Skript so aussehen:

js
let foo = "my result";
foo;

Hier enthält das Ergebnisarray den String "my result" als Element.

Die Ergebniswerte müssen strukturiert klonbar sein (siehe Datenklon-Algorithmus).

Hinweis: Die letzte Anweisung kann auch ein Promise sein, aber diese Funktion wird von der webextension-polyfill-Bibliothek nicht unterstützt.

Wenn ein Fehler auftritt, wird das Promise mit einer Fehlermeldung abgelehnt.

Beispiele

Dieses Beispiel führt ein einzeiliges Code-Snippet 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 (mit der Erweiterung gepackt) mit dem Namen "content-script.js" aus. Das Skript wird im aktiven Tab ausgeführt. Das Skript wird sowohl in Subframes als auch im Hauptdokument ausgeführt:

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 (mit der Erweiterung gepackt) mit dem Namen "content-script.js" aus. 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 der chrome.tabs API von Chromium. Diese Dokumentation leitet sich von tabs.json im Chromium-Code ab.