runtime.connect()

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

Sie können dies aufrufen:

  • in den Inhalts-Skripten einer Erweiterung, um eine Verbindung mit den Hintergrund-Skripten der Erweiterung (oder ähnlich privilegierten Skripten, wie z. B. Popup-Skripten oder Optionsseiten-Skripten) herzustellen.
  • in den Hintergrund-Skripten einer Erweiterung (oder ähnlich privilegierten Skripten), um eine Verbindung mit einer anderen Erweiterung herzustellen.

Beachten Sie, dass Sie diese Funktion nicht verwenden können, um eine Erweiterung mit ihren Inhalts-Skripten zu verbinden. Verwenden Sie dazu tabs.connect().

Standardmäßig ermöglicht diese Verbindung der Erweiterung den Nachrichtenaustausch mit sich selbst oder einer anderen Erweiterung (falls extensionId angegeben ist). Der externally_connectable Manifest-Schlüssel kann jedoch verwendet werden, um die Kommunikation auf bestimmte Erweiterungen zu beschränken und die 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 eine Verbindung hergestellt werden soll. Wenn das Ziel explizit eine ID mit dem Schlüssel browser_specific_settings in manifest.json festgelegt hat, sollte extensionId diesen Wert haben. Andernfalls sollte es die ID haben, die für das Ziel generiert wurde.

connectInfo Optional

object. Details zur Verbindung:

name Optional

string. Wird an runtime.onConnect übergeben für Prozesse, die auf das Verbindungsevent warten.

includeTlsChannelId Optional

boolean. Ob die TLS-Kanal-ID an runtime.onConnectExternal übergeben wird für Prozesse, die auf das Verbindungsevent warten.

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

BCD tables only load in the browser

Beispiele

Dieses Inhalts-Skript:

  • stellt eine Verbindung zum Hintergrund-Skript her und speichert den Port in einer Variablen namens myPort.
  • hört auf Nachrichten auf myPort und protokolliert sie.
  • sendet Nachrichten an das Hintergrund-Skript, indem es myPort verwendet, wenn der Benutzer auf das Dokument klickt.
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 Hintergrund-Skript:

  • hört auf Verbindungsversuche vom Inhalts-Skript.

  • wenn es einen Verbindungsversuch empfängt:

    • speichert es den Port in einer Variablen namens portFromCS.
    • sendet dem Inhalts-Skript eine Nachricht über den Port.
    • beginnt, Nachrichten zu empfangen, die über den Port gesendet werden, und protokolliert sie.
  • sendet Nachrichten an das Inhalts-Skript, indem es portFromCS verwendet, wenn der Benutzer auf die Browseraktion der Erweiterung klickt.

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 Chromiums chrome.runtime API. Diese Dokumentation ist abgeleitet von runtime.json im Chromium Code.