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。