runtime.onUserScriptMessage
Verwenden Sie dieses Ereignis, um Nachrichten zu empfangen, die von einer der USER_SCRIPT-Welten der Erweiterung gesendet werden.
In Firefox erfordert dieses Ereignis die userScripts-Berechtigung. In Chrome ist das Ereignis immer verfügbar, auch in Erweiterungen, die die userScripts-Berechtigung nicht deklarieren.
Ein Userscript kann nur Nachrichten mit runtime.sendMessage von einer USER_SCRIPT-Welt senden, die mit userScripts.configureWorld() konfiguriert ist und bei der messaging auf true gesetzt ist.
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 zu schicken.
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, dieses Ereignis zu überwachen. Das Argument
listenerist der zu entfernende Listener. hasListener(listener)-
Überprüft, ob ein
listenerfür dieses Ereignis registriert ist. Gibttruezurück, wenn es zuhört, andernfallsfalse.
Syntax der addListener
>Parameter
listener-
Die Funktion, die aufgerufen wird, wenn dieses Ereignis eintritt. Die Funktion erhält folgende Argumente:
message-
object. Die Nachricht. Dies ist ein JSON-fähiges Objekt. sender-
Ein
runtime.MessageSender-Objekt, das den Absender der Nachricht darstellt. sendResponse-
Eine Funktion, die höchstens einmal aufgerufen werden kann, um eine Antwort auf die Nachricht zu senden. Die Funktion nimmt ein Argument entgegen, das jedes JSON-fähige Objekt sein kann. Dieses Argument wird an den Absender der Nachricht zurückgegeben.
Wenn Sie mehr als einen
onUserScriptMessage-Listener im selben Dokument haben, kann nur einer eine Antwort senden.Um eine Antwort synchron zu senden, rufen Sie
sendResponseauf, bevor die Listener-Funktion zurückkehrt. Um eine Antwort asynchron zu senden, machen Sie Folgendes:- Behalten Sie eine Referenz auf das
sendResponse-Argument und geben Sietruevon der Listener-Funktion zurück. Sie können dannsendResponseaufrufen, nachdem die Listener-Funktion zurückgekehrt ist. - Geben Sie ein
Promisevon der Listener-Funktion zurück und lösen Sie das Promise auf, 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 es 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
Loading…