runtime.onUserScriptMessage
使用此事件來監聽來自擴充套件的 USER_SCRIPT worlds 的訊息。
在 Firefox 中,此事件需要 userScripts 許可權。在 Chrome 中,即使擴充套件未宣告 userScripts 許可權,此事件也始終可用。
使用者指令碼只能從由 userScripts.configureWorld() 配置且 messaging 設定為 true 的 USER_SCRIPT world 使用 runtime.sendMessage 傳送訊息。
除了訊息之外,監聽器還會收到
- 一個
sender物件,其中包含有關訊息傳送者的詳細資訊。 - 一個
sendResponse函式,監聽器可以使用它將響應傳送回傳送者。
語法
js
browser.runtime.onUserScriptMessage.addListener(listener)
browser.runtime.onUserScriptMessage.removeListener(listener)
browser.runtime.onUserScriptMessage.hasListener(listener)
事件有三個函式
addListener(listener)-
向此事件新增監聽器。
removeListener(listener)-
停止監聽此事件。
listener引數是要移除的監聽器。 hasListener(listener)-
檢查此事件是否已註冊
listener。如果正在偵聽,則返回true,否則返回false。
addListener 語法
引數
監聽器-
此事件發生時呼叫的函式。該函式會傳遞以下引數:
message-
object。訊息。這是一個可 JSON 化的物件。 sender-
一個
runtime.MessageSender物件,表示訊息的傳送者。 sendResponse-
一個最多呼叫一次以將響應傳送給訊息的函式。該函式接受一個引數,該引數是任何可 JSON 化的物件。此引數將傳遞迴訊息傳送者。
如果您在同一個文件中有多個
onUserScriptMessage監聽器,則只有一個可以傳送響應。要同步傳送響應,請在監聽器函式返回之前呼叫
sendResponse。要非同步傳送響應,請執行以下操作之一:- 保留
sendResponse引數的引用,並從監聽器函式返回true。然後,您可以在監聽器函式返回後呼叫sendResponse。 - 從監聽器函式返回一個
Promise,並在響應準備就緒時解析該 Promise。
- 保留
示例
在此示例中,一個 ID 為 myScriptWorld 的 USER_SCRIPT world 中的使用者指令碼向註冊它的擴充套件傳送訊息。
js
// The user script
// Send a message to the extension that registered the user script
browser.runtime.sendMessage("my message");
js
// 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);
擴充套件程式示例
瀏覽器相容性
載入中…