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
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 sollteextensionId
diesen Wert haben. Andernfalls sollte es die für das Ziel generierte ID sein. connectInfo
Optional-
object
. Details der Verbindung:name
Optional-
string
. Wird inruntime.onConnect
übermittelt für Prozesse, die auf das Verbindungsevent hören. includeTlsChannelId
Optional-
boolean
. Ob die TLS-Kanal-ID inruntime.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 namensmyPort
. - hört auf Nachrichten bei
myPort
und protokolliert sie. - sendet Nachrichten an das Hintergrundskript, unter Verwendung von
myPort
, wenn der Benutzer das Dokument anklickt.
// 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.
- speichert es den Port in einer Variablen namens
-
sendet Nachrichten an das Inhalteskript, unter Verwendung von
portFromCS
, wenn der Benutzer die Browseraktion der Erweiterung anklickt.
// 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.