runtime.connect()
Stellen Sie eine Verbindung zwischen verschiedenen Kontexten innerhalb der Erweiterung her.
Diese Funktion kann aufgerufen werden:
- in den Inhalts-Skripten einer Erweiterung, um eine Verbindung mit den Hintergrund-Skripten der Erweiterung (oder ähnlich privilegierten Skripten, wie 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 dafür 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 mit bestimmten 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
let port = browser.runtime.connect(
extensionId, // optional string
connectInfo // optional object
)
Parameter
extensionId
Optional-
string
. Die ID der Erweiterung, zu der die Verbindung hergestellt werden soll. Wenn das Ziel eine ID explizit mit dem Schlüssel browser_specific_settings in manifest.json festgelegt hat, sollteextensionId
diesen Wert haben. Andernfalls sollte es die für das Ziel generierte ID haben. connectInfo
Optional-
object
. Details zur Verbindung:name
Optional-
string
. Wird inruntime.onConnect
übergeben für Prozesse, die auf das Verbindungsevent warten. includeTlsChannelId
Optional-
boolean
. Ob die TLS-Kanal-ID inruntime.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.
Beispiele
Dieses Inhalts-Skript:
- stellt eine Verbindung zum Hintergrund-Skript her und speichert den
Port
in einer Variablen namensmyPort
. - hört auf Nachrichten auf
myPort
und protokolliert sie. - sendet Nachrichten an das Hintergrund-Skript unter Verwendung von
myPort
, wenn der Benutzer auf das Dokument klickt.
// 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 zugehörige Hintergrund-Skript:
-
hört auf Verbindungsversuche vom Inhalts-Skript.
-
wenn es einen Verbindungsversuch erhält:
- speichert es den Port in einer Variablen namens
portFromCS
. - sendet dem Inhalts-Skript eine Nachricht über den Port.
- beginnt, Nachrichten zu hören, die auf dem Port empfangen werden, und protokolliert sie.
- speichert es den Port in einer Variablen namens
-
sendet Nachrichten an das Inhalts-Skript unter Verwendung von
portFromCS
, wenn der Benutzer auf die Browseraktion der Erweiterung klickt.
// 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!" });
});
Browser-Kompatibilität
Hinweis:
Diese API basiert auf der chrome.runtime
API von Chromium. Diese Dokumentation ist abgeleitet von runtime.json
im Chromium-Code.