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
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, sollteextensionId
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 anruntime.onConnect
übergeben für Prozesse, die auf das Verbindungsevent warten. includeTlsChannelId
Optional-
boolean
. Ob die TLS-Kanal-ID anruntime.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 namensmyPort
. - 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.
// 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.
- speichert es den Port in einer Variablen namens
-
sendet Nachrichten an das Inhalts-Skript, indem es
portFromCS
verwendet, 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!" });
});
Hinweis: Diese API basiert auf Chromiums chrome.runtime
API. Diese Dokumentation ist abgeleitet von runtime.json
im Chromium Code.