Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

tabs.sendMessage()

Sendet eine einzelne Nachricht von den Hintergrundskripten der Erweiterung (oder anderen privilegierten Skripten, wie z.B. Popup-Skripten oder Optionsseitenskripten) an beliebige Content-Skripte oder Erweiterungsseiten/Iframes, die zur Erweiterung gehören und im angegebenen Tab laufen.

Die Nachricht wird im Kontext der Erweiterung 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.

Syntax

js
const sending = browser.tabs.sendMessage(
  tabId,     // integer
  message,   // any
  options    // optional object
)

Parameter

tabId

integer. ID des Tabs, dessen Content-Skripten wir eine Nachricht senden möchten.

message

any. Ein Objekt, das serialisierbar ist (siehe Datenklonierungsalgorithmus).

options Optional

object.

documentId Optional

string. Sendet eine Nachricht an ein bestimmtes Dokument, das durch documentId identifiziert wird, anstatt an alle Frames im Tab.

frameId Optional

integer. Sendet die Nachricht an einen bestimmten Frame, der durch frameId identifiziert wird, anstatt an alle Frames im Tab. Ob das Content-Skript in allen Frames ausgeführt wird, hängt von der all_frames-Einstellung im content_scripts-Abschnitt von manifest.json ab.

Rückgabewert

Ein Promise, das mit dem Antwortobjekt erfüllt wird, das vom Handler der Nachricht im Content-Skript gesendet wurde, oder ohne Argumente, wenn das Content-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 gelöst.

Beispiele

Hier ist ein Beispiel für ein Hintergrundskript, das eine Nachricht an die Content-Skripte sendet, die im aktiven Tab laufen, wenn der Benutzer auf die Browser-Aktion klickt. Das Hintergrundskript erwartet auch, dass das Content-Skript eine Antwort sendet:

js
// 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 Content-Skript:

js
// 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 wird aus tabs.json im Chromium-Code abgeleitet.