runtime.onMessageExternal
Verwenden Sie dieses Ereignis, um auf Nachrichten von anderen Erweiterungen oder Webseiten zu hören.
Standardmäßig kann eine Erweiterung Nachrichten von beliebigen anderen Erweiterungen empfangen. 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.
Um eine Nachricht zu senden, die vom onMessageExternal-Listener empfangen wird, verwenden Sie runtime.sendMessage() und übergeben die ID des Empfängers im extensionId-Parameter.
Zusammen mit der Nachricht erhält der Listener:
- ein
senderObjekt mit Details über den Absender der Nachricht. - eine
sendResponseFunktion, die der Listener verwenden kann, um eine Antwort an den Absender zurückzusenden.
Diese API kann nicht in einem Content-Skript verwendet werden.
Siehe runtime.onMessage für zusätzliche Informationen zum Empfangen von Nachrichten und Senden von Antworten sowie Beispiele für die verschiedenen Optionen zum Senden von Antworten.
Syntax
browser.runtime.onMessageExternal.addListener()
browser.runtime.onMessageExternal.removeListener(listener)
browser.runtime.onMessageExternal.hasListener(listener)
Ereignisse haben drei Funktionen:
addListener(listener)-
Fügt diesem Ereignis einen Listener hinzu.
removeListener(listener)-
Beendet das Lauschen auf dieses Ereignis. Das
listener-Argument ist der zu entfernende Listener. hasListener(listener)-
Überprüft, ob ein
listenerfür dieses Ereignis registriert ist. Gibttruezurück, wenn es lauscht, ansonstenfalse.
addListener Syntax
>Parameter
listener-
Die Funktion, die aufgerufen wird, wenn dieses Ereignis auftritt. Der Funktion werden diese Argumente übergeben:
message-
object. Die Nachricht. Dies ist ein JSON-serialisierbares Objekt. sender-
Ein
runtime.MessageSenderObjekt, das den Absender der Nachricht repräsentiert. sendResponse-
Eine Funktion, die höchstens einmal aufgerufen werden kann, um eine Antwort auf die Nachricht zu senden. Die Funktion nimmt ein Argument, das ein JSON-serialisierbares Objekt ist. Dieses Argument wird an den Absender der Nachricht zurückgesendet.
Wenn Sie mehr als einen
onMessageExternalListener im selben Dokument haben, kann nur einer eine Antwort senden.Um eine Antwort synchron zu senden, rufen Sie
sendResponse()auf, bevor die Listener-Funktion zurückkehrt.Um eine Antwort asynchron zu senden, verwenden Sie eine dieser Optionen:
-
Geben Sie ein
Promisevon der Listener-Funktion zurück und lösen Sie das Promise auf, wenn die Antwort bereit ist. Dies ist der bevorzugte Ansatz. -
Behalten Sie eine Referenz auf das
sendResponse()-Argument und geben Sietruevon der Listener-Funktion zurück. Sie rufen dannsendResponse()auf, nachdem die Listener-Funktion zurückgekehrt ist.Hinweis: Promise als Rückgabewert wird in Chrome nicht unterstützt, bis Chrome Bug 1185241 gelöst ist. Als Alternative geben Sie
truezurück und verwendensendResponsewie fürruntime.onMessagebeschrieben.
-
Beispiele
In diesem Beispiel sendet die Erweiterung "blue@mozilla.org" eine Nachricht an die Erweiterung "red@mozilla.org":
// sender: browser.runtime.id === "blue@mozilla.org"
// Send a message to the extension whose ID is "red@mozilla.org"
browser.runtime.sendMessage("red@mozilla.org", "my message");
// recipient: browser.runtime.id === "red@mozilla.org"
function handleMessage(message, sender) {
// check that the message is from "blue@mozilla.org"
if (sender.id === "blue@mozilla.org") {
// process message
}
}
browser.runtime.onMessageExternal.addListener(handleMessage);
Browser-Kompatibilität
Loading…
Hinweis:
Diese API basiert auf Chromiums chrome.runtime API. Diese Dokumentation ist von runtime.json im Chromium-Code abgeleitet.