tabs.sendMessage()
Sendet eine einzelne Nachricht von den Hintergrundskripten der Erweiterung (oder anderen privilegierten Skripten, wie z.B. Popup-Skripten oder Optionsseitenskripten) an beliebige Inhalts-Skripte oder Erweiterungsseiten/Iframes, die zur Erweiterung gehören und im angegebenen Tab ausgeführt werden.
Die Nachricht wird im Erweiterungskontext von allen Listenern des runtime.onMessage
-Ereignisses empfangen. Listener können optional etwas als Antwort an den Absender zurücksenden.
Dies ist eine asynchrone Funktion, die ein Promise
zurückgibt.
Hinweis: Sie können auch einen verbindungsbasierten Ansatz zum Austauschen von Nachrichten verwenden.
Syntax
const sending = browser.tabs.sendMessage(
tabId, // integer
message, // any
options // optional object
)
Parameter
tabId
-
integer
. ID des Tabs, dessen Inhalts-Skripte wir eine Nachricht senden möchten. message
-
any
. Ein Objekt, das serialisiert werden kann (siehe Datenklon-Algorithmus). options
Optional-
object
.frameId
Optional-
integer
. Sendet die Nachricht an einen bestimmten Frame, der durchframeId
identifiziert wird, anstatt an alle Frames im Tab. Ob das Inhalts-Skript in allen Frames ausgeführt wird, hängt von derall_frames
-Einstellung imcontent_scripts
-Abschnitt vonmanifest.json
ab.
Rückgabewert
Ein Promise
, das mit dem Antwortobjekt erfüllt wird, das vom Handler der Nachricht im Inhalts-Skript gesendet wurde, oder ohne Argumente, wenn das Inhalts-Skript keine Antwort gesendet hat.
Wenn ein Fehler beim Verbinden mit dem angegebenen Tab 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 im aktiven Tab ausgeführten Inhalts-Skripte sendet, wenn der Benutzer auf die Browseraktion 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 der chrome.tabs
-API von Chromium. Diese Dokumentation ist abgeleitet von tabs.json
im Chromium-Code.