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
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 der aktive Tab des aktuellen Fensters.
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 injiziert.Wenn auf
truegesetzt undframeIdgesetzt ist, wird ein Fehler ausgegeben. (frameIdundallFramesschließen sich gegenseitig aus.)Wenn
false, wird der Code nur in den Top-Frame injiziert.Standardmäßig
false. codeOptional-
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.
fileOptional-
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". frameIdOptional-
integer. Der Frame, in den der Code injiziert werden soll.Standardmäßig
0(der Top-Level-Frame). matchAboutBlankOptional-
boolean. Wenntrue, wird der Code in eingebetteteabout:blankundabout:srcdocFrames injiziert, wenn Ihre Erweiterung Zugriff auf deren übergeordnetes Dokument hat. Der Code kann nicht in obersteabout:Frames eingefügt werden.Standardmäßig
false. runAtOptional-
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:
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:
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:
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:
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.