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
let executing = browser.tabs.executeScript(
tabId, // optional integer
details // object
)
Parameter
tabIdOptional-
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:
allFramesOptional-
boolean. Wenntrue, wird der Code in alle Frames der aktuellen Seite eingefügt.Wenn der Wert
trueist undframeIdgesetzt wurde, tritt ein Fehler auf. (frameIdundallFramesschließen sich gegenseitig aus.)Wenn der Wert
falseist, wird der Code nur in den obersten Frame eingefügt.Der Standardwert ist
false. codeOptional-
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.
fileOptional-
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". frameIdOptional-
integer. Der Frame, in den der Code eingefügt werden soll.Der Standardwert ist
0(der oberste Frame). matchAboutBlankOptional-
boolean. Wenntrue, wird der Code in eingebetteteabout:blank- undabout:srcdoc-Frames eingefügt, sofern Ihre Erweiterung Zugriff auf deren übergeordnetes Dokument hat. In obersteabout:-Frames kann der Code nicht eingefügt werden.Der Standardwert ist
false. runAtOptional-
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:
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:
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:
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:
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.