runtime.connect()

Stellen Sie eine Verbindung zwischen verschiedenen Kontexten innerhalb der Erweiterung her.

Sie können dies aufrufen:

  • in den Inhalteskripten einer Erweiterung, um eine Verbindung zu den Hintergrundskripten der Erweiterung (oder ähnlich privilegierten Skripten, wie z. B. Pop-up-Skripten oder Optionen-Seitenskripten) herzustellen.
  • in den Hintergrundskripten einer Erweiterung (oder ähnlich privilegierten Skripten), um eine Verbindung zu einer anderen Erweiterung herzustellen.

Beachten Sie, dass Sie diese Funktion nicht nutzen können, um eine Erweiterung mit ihren Inhalteskripten zu verbinden. Dazu verwenden Sie tabs.connect().

Standardmäßig ermöglicht diese Verbindung der Erweiterung, Nachrichten mit sich selbst oder einer anderen Erweiterung (wenn extensionId angegeben ist) auszutauschen. Allerdings kann der externally_connectable Manifest-Schlüssel verwendet werden, um die Kommunikation auf bestimmte Erweiterungen zu beschränken und Kommunikation mit Websites zu ermöglichen. Verbindungen innerhalb der Erweiterung lösen das runtime.onConnect-Ereignis aus, Verbindungen von anderen Erweiterungen oder Webseiten lösen das runtime.onConnectExternal-Ereignis aus.

Syntax

js
let port = browser.runtime.connect(
  extensionId, // optional string
  connectInfo  // optional object
)

Parameter

extensionId Optional

string. Die ID der Erweiterung, zu der verbunden werden soll. Wenn das Ziel explizit eine ID mit Hilfe des browser_specific_settings Schlüssels in der manifest.json gesetzt hat, dann sollte extensionId diesen Wert haben. Andernfalls sollte es die für das Ziel generierte ID sein.

connectInfo Optional

object. Details der Verbindung:

name Optional

string. Wird in runtime.onConnect übermittelt für Prozesse, die auf das Verbindungsevent hören.

includeTlsChannelId Optional

boolean. Ob die TLS-Kanal-ID in runtime.onConnectExternal übermittelt wird für Prozesse, die auf das Verbindungsevent hören.

Rückgabewert

runtime.Port. Port, über den Nachrichten gesendet und empfangen werden können. Das onDisconnect-Ereignis des Ports wird ausgelöst, wenn die Erweiterung nicht existiert.

Browser-Kompatibilität

Beispiele

Dieses Inhalteskript:

  • verbindet sich mit dem Hintergrundskript und speichert den Port in einer Variablen namens myPort.
  • hört auf Nachrichten bei myPort und protokolliert sie.
  • sendet Nachrichten an das Hintergrundskript, unter Verwendung von myPort, wenn der Benutzer das Dokument anklickt.
js
// content-script.js

let myPort = browser.runtime.connect({ name: "port-from-cs" });
myPort.postMessage({ greeting: "hello from content script" });

myPort.onMessage.addListener((m) => {
  console.log("In content script, received message from background script: ");
  console.log(m.greeting);
});

document.body.addEventListener("click", () => {
  myPort.postMessage({ greeting: "they clicked the page!" });
});

Das entsprechende Hintergrundskript:

  • hört auf Verbindungsversuche vom Inhalteskript.

  • Wenn es einen Verbindungsversuch empfängt:

    • speichert es den Port in einer Variablen namens portFromCS.
    • sendet dem Inhalteskript eine Nachricht unter Verwendung des Ports.
    • beginnt, auf Nachrichten zu hören, die über den Port empfangen werden, und protokolliert sie.
  • sendet Nachrichten an das Inhalteskript, unter Verwendung von portFromCS, wenn der Benutzer die Browseraktion der Erweiterung anklickt.

js
// background-script.js

let portFromCS;

function connected(p) {
  portFromCS = p;
  portFromCS.postMessage({ greeting: "hi there content script!" });
  portFromCS.onMessage.addListener((m) => {
    console.log("In background script, received message from content script");
    console.log(m.greeting);
  });
}

browser.runtime.onConnect.addListener(connected);

browser.browserAction.onClicked.addListener(() => {
  portFromCS.postMessage({ greeting: "they clicked the button!" });
});

Hinweis: Diese API basiert auf der chrome.runtime-API von Chromium. Diese Dokumentation ist abgeleitet aus runtime.json im Chromium-Code.