runtime.onUserScriptMessage
Verwenden Sie dieses Ereignis, um Nachrichten zu empfangen, die von einer der Erweiterungen in den USER_SCRIPT
-Welten gesendet werden.
In Firefox erfordert dieses Ereignis die Berechtigung userScripts
. In Chrome ist das Ereignis immer verfügbar, auch in Erweiterungen, die keine userScripts
-Berechtigung angeben.
Ein Userscript kann nur Nachrichten senden, indem es runtime.sendMessage
aus einer USER_SCRIPT
-Welt verwendet, die mit messaging
auf true
konfiguriert ist durch userScripts.configureWorld()
.
Zusammen mit der Nachricht wird dem Listener Folgendes übergeben:
- ein
sender
-Objekt mit Details über den Absender der Nachricht. - eine
sendResponse
-Funktion, die der Listener verwenden kann, um eine Antwort an den Absender zurückzusenden.
Syntax
browser.runtime.onUserScriptMessage.addListener(listener)
browser.runtime.onUserScriptMessage.removeListener(listener)
browser.runtime.onUserScriptMessage.hasListener(listener)
Ereignisse haben drei Funktionen:
addListener(listener)
-
Fügt diesem Ereignis einen Listener hinzu.
removeListener(listener)
-
Hört auf, auf dieses Ereignis zu lauschen. Das
listener
-Argument ist der zu entfernende Listener. hasListener(listener)
-
Überprüft, ob ein
listener
für dieses Ereignis registriert ist. Gibttrue
zurück, wenn es lauscht, andernfallsfalse
.
addListener-Syntax
Parameter
listener
-
Die Funktion, die aufgerufen wird, wenn dieses Ereignis eintritt. Der Funktion werden diese Argumente übergeben:
message
-
object
. Die Nachricht. Dies ist ein JSON-serialisierbares Objekt. sender
-
Ein
runtime.MessageSender
-Objekt, das den Absender der Nachricht repräsentiert. sendResponse
-
Eine Funktion, die höchstens einmal aufgerufen wird, um eine Antwort auf die Nachricht zu senden. Die Funktion nimmt ein Argument, das ein JSON-serialisierbares Objekt ist. Dieses Argument wird an den Nachrichtenabsender zurückgegeben.
Wenn Sie mehr als einen
onUserScriptMessage
-Listener im selben Dokument haben, kann nur einer eine Antwort senden.Um synchron eine Antwort zu senden, rufen Sie
sendResponse
auf, bevor die Listener-Funktion zurückkehrt. Um eine Antwort asynchron zu senden, tun Sie eine der folgenden Dinge:- Behalten Sie eine Referenz auf das
sendResponse
-Argument und geben Sietrue
von der Listener-Funktion zurück. Sie können dannsendResponse
aufrufen, nachdem die Listener-Funktion zurückgekehrt ist. - Geben Sie ein
Promise
von der Listener-Funktion zurück und lösen Sie das Versprechen, wenn die Antwort bereit ist.
- Behalten Sie eine Referenz auf das
Beispiele
In diesem Beispiel sendet ein Userscript in einer USER_SCRIPT
-Welt mit der ID myScriptWorld
eine Nachricht an die Erweiterung, die sie registriert hat:
// The user script
// Send a message to the extension that registered the user script
browser.runtime.sendMessage("my message");
// The extension that registered the user script
function handleMessage(message, sender) {
// check that the message originated from "myScriptWorld" world
if (sender.userScriptWorldId === "myScriptWorld") {
// process message
console.log(message);
}
}
browser.runtime.onUserScriptMessage.addListener(handleMessage);
Beispielerweiterungen
Browser-Kompatibilität
BCD tables only load in the browser