runtime.onMessageExternal
使用此事件來偵聽來自其他擴充套件或網頁的訊息。
預設情況下,擴充套件可以接收來自任何其他擴充套件的訊息。但是,可以使用 externally_connectable manifest 鍵將通訊限制為特定的擴充套件,並啟用與網站的通訊。
要傳送一條由 onMessageExternal 偵聽器接收的訊息,請使用 runtime.sendMessage(),並在 extensionId 引數中傳遞接收者的 ID。
除了訊息本身,偵聽器還會接收
- 一個
sender物件,其中包含有關訊息傳送者的詳細資訊。 - 一個
sendResponse函式,偵聽器可以使用該函式將響應傳送回發件人。
此 API 不能在內容指令碼中使用。
有關接收訊息和傳送響應的更多資訊,以及傳送響應的各種選項的示例,請參閱 runtime.onMessage。
語法
browser.runtime.onMessageExternal.addListener()
browser.runtime.onMessageExternal.removeListener(listener)
browser.runtime.onMessageExternal.hasListener(listener)
事件有三個函式
addListener(listener)-
向此事件新增監聽器。
removeListener(listener)-
停止監聽此事件。
listener引數是要移除的監聽器。 hasListener(listener)-
檢查此事件是否已註冊
listener。如果正在偵聽,則返回true,否則返回false。
addListener 語法
引數
監聽器-
此事件發生時呼叫的函式。該函式會傳遞以下引數:
message-
object。訊息。這是一個可 JSON 化的物件。 sender-
一個
runtime.MessageSender物件,表示訊息的傳送者。 sendResponse-
一個最多呼叫一次的函式,用於將響應傳送回訊息。該函式接受一個引數,該引數是一個可 JSON 化的物件。此引數將傳遞迴訊息發件人。
如果您在同一文件中有多個
onMessageExternal偵聽器,那麼只有一個可以傳送響應。要同步傳送響應,請在偵聽器函式返回之前呼叫
sendResponse()。要非同步傳送響應,請使用以下選項之一:
-
從偵聽器函式返回一個
Promise,並在響應準備就緒時解析該 Promise。這是首選方法。 -
保留
sendResponse()引數的引用,並從偵聽器函式返回true。然後,您可以在偵聽器函式返回後呼叫sendResponse()。注意: 直到 Chrome bug 1185241 解決之前,Chrome 不支援 Promise 作為返回值。作為替代方案,請返回
true並使用sendResponse,如runtime.onMessage所述。
-
示例
在此示例中,擴充套件 "blue@mozilla.org" 向擴充套件 "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);
瀏覽器相容性
載入中…
注意: 此 API 基於 Chromium 的 chrome.runtime API。本文件源自 Chromium 程式碼中的 runtime.json。