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
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 undframeIdist ebenfalls gesetzt, wird ein Fehler ausgelöst. (frameIdundallFramesschließen sich gegenseitig aus.)Wenn es
falseist, wird der Code nur in den obersten Frame injiziert.Standardwert ist
false. codeOptional-
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.
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, beginnend am Stamm der Erweiterung, wie folgt:
"/path/to/script.js". frameIdOptional-
integer. Der Frame, in den der Code injiziert werden soll.Standardwert ist
0(das oberste Frame). matchAboutBlankOptional-
boolean. Wenntrue, wird der Code in eingebetteteabout:blankundabout:srcdocFrames injiziert, wenn Ihre Erweiterung Zugang zu ihrem übergeordneten Dokument hat. Der Code kann nicht in obersteabout:Frames eingefügt werden.Standardwert ist
false. runAtOptional-
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:
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:
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:
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:
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.