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);
扩展程序示例
浏览器兼容性
加载中…