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()

Injiziert JavaScript-Code in eine Seite.

Hinweis: Wenn Manifest V3 oder höher verwendet wird, verwenden Sie scripting.executeScript(), um Skripte auszuführen.

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

Sie müssen die Berechtigung für die URL der Seite entweder ausdrücklich als Host-Berechtigung oder mithilfe der activeTab-Berechtigung besitzen. Beachten Sie, dass einige spezielle Seiten diese Erlaubnis nicht zulassen, darunter Leseransicht, Quelltextansicht, PDF-Viewer und andere integrierte Browser-UI-Seiten.

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

Hinweis: Die Möglichkeit, Code in mit Ihrer Erweiterung verpackte Seiten zu injizieren, wurde in Firefox 149 veraltet und in Firefox 152 entfernt.

Die von Ihnen injizierten Skripte werden als Content-Skripte bezeichnet.

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 gesetzt ist, wird ein Fehler ausgegeben. (frameId und allFrames schließen sich gegenseitig aus.)

Wenn false, wird der Code nur in den Top-Frame injiziert.

Standardmäßig false.

code Optional

string. Code, der als Textzeichenfolge injiziert werden soll.

Warnung: Verwenden Sie diese Eigenschaft nicht, um nicht vertrauenswürdige Daten in JavaScript einzubetten, 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, die am Root der Erweiterung beginnt, wie folgt: "/path/to/script.js".

frameId Optional

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

Standardmäßig 0 (der Top-Level-Frame).

matchAboutBlank Optional

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

Standardmäßig false.

runAt Optional

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

Standardmäßig "document_idle".

Rückgabewert

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

Das Ergebnis des Skripts ist die letzte ausgewertete Anweisung, die dem Output ähnelt (die Ergebnisse, nicht die console.log()-Ausgabe), wenn Sie das Skript in der Webkonsole ausführen würden. Zum Beispiel, bei einem Skript wie diesem:

js
let foo = "my result";
foo;

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

Die Ergebniswerte müssen strukturklonbar 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 einzeiligen Code 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 aus (mit der Erweiterung verpackt) namens "content-script.js". Das Skript wird im aktiven Tab ausgeführt. Das Skript wird sowohl in Unterframes 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 aus (mit der Erweiterung verpackt) namens "content-script.js". 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 ist abgeleitet von tabs.json im Chromium-Code.