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