Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
tabs.sendMessage()
Sendet eine einzelne Nachricht von den Hintergrundskripten der Erweiterung (oder anderen privilegierten Skripten, wie z.B. Popup-Skripte oder Optionen-Seiten-Skripten) an beliebigeInhalts-Skripte oder Erweiterungsseiten/Iframes, die zur Erweiterung gehören und im angegebenen Tab ausgeführt werden.
Die Nachricht wird im Erweiterungskontext von allen Zuhörern desruntime.onMessage-Ereignisses empfangen. Zuhörer können dann optional etwas als Antwort an den Absender zurückschicken.
Dies ist eine asynchrone Funktion, die einPromise zurückgibt.
Hinweis:Sie können aucheinen verbindungsbasierten Ansatz zum Nachrichtenaustausch verwenden.
In diesem Artikel
Syntax
const sending = browser.tabs.sendMessage( tabId, // integer message, // any options // optional object)Parameter
tabIdinteger. ID des Tabs, dessen Inhalts-Skripte wir eine Nachricht senden möchten.messageany. Ein Objekt, das serialisierbar ist (sieheDatenduplizierungsalgorithmus).optionsOptionalobject.frameIdOptionalinteger. Sendet die Nachricht an einen bestimmten Frame, der durchframeIdidentifiziert wird, anstatt an alle Frames im Tab. Ob das Inhalts-Skript in allen Frames ausgeführt wird, hängt von der Einstellungall_framesim Abschnittcontent_scriptsdermanifest.jsonab.
Rückgabewert
EinPromise, das mit dem Antwortobjekt erfüllt wird, das vom Handler der Nachricht im Inhalts-Skript gesendet wird, oder ohne Argumente, wenn das Inhalts-Skript keine Antwort gesendet hat.
Wenn ein Fehler beim Verbinden mit dem angegebenen Tab auftritt oder ein anderer Fehler auftritt, wird das Promise mit einer Fehlermeldung abgelehnt.
Wenn mehrere Frames auf die Nachricht antworten, wird das Promise mit einer der Antworten aufgelöst.
Beispiele
Hier ist ein Beispiel für ein Hintergrundskript, das eine Nachricht an die Inhalts-Skripte sendet, die im aktiven Tab ausgeführt werden, wenn der Benutzer auf die Browser-Aktion klickt. Das Hintergrundskript erwartet auch, dass das Inhalts-Skript eine Antwort sendet:
// background-script.js"use strict";function onError(error) { console.error(`Error: ${error}`);}function sendMessageToTabs(tabs) { for (const tab of tabs) { browser.tabs .sendMessage(tab.id, { greeting: "Hi from background script" }) .then((response) => { console.log("Message from the content script:"); console.log(response.response); }) .catch(onError); }}browser.browserAction.onClicked.addListener(() => { browser.tabs .query({ currentWindow: true, active: true, }) .then(sendMessageToTabs) .catch(onError);});Hier ist das entsprechende Inhalts-Skript:
// content-script.js"use strict";browser.runtime.onMessage.addListener((request) => { console.log("Message from the background script:"); console.log(request.greeting); return Promise.resolve({ response: "Hi from content script" });});Beispielerweiterungen
Browser-Kompatibilität
Hinweis:Diese API basiert auf derchrome.tabs API von Chromium. Diese Dokumentation ist abgeleitet vontabs.json im Chromium-Code.