runtime.onConnectExternal
当扩展程序收到来自另一个扩展程序的连接请求时触发。
要发送将由onConnectExternal
监听器接收的消息,请使用runtime.connect()
,并在extensionId
参数中传递接收者的 ID。
监听器会传递一个runtime.Port
对象,然后它可以使用该对象发送和接收消息。Port
对象还包含一个sender
属性,该属性是一个runtime.MessageSender
对象,接收者可以使用该对象检查发送者的 ID。
语法
js
browser.runtime.onConnectExternal.addListener(listener)
browser.runtime.onConnectExternal.removeListener(listener)
browser.runtime.onConnectExternal.hasListener(listener)
事件具有三个函数
addListener(listener)
-
为该事件添加监听器。
removeListener(listener)
-
停止监听此事件。
listener
参数是要移除的监听器。 hasListener(listener)
-
检查是否为该事件注册了
listener
。如果正在监听,则返回true
,否则返回false
。
addListener 语法
参数
函数
-
当此事件发生时调用的函数。该函数将传递此参数
端口
-
一个
runtime.Port
对象,用于将当前脚本连接到它正在连接的其他扩展程序。
浏览器兼容性
BCD 表格仅在浏览器中加载
示例
在此示例中,扩展程序 Hansel 连接到扩展程序 Gretel
js
console.log("connecting to Gretel");
let myPort = browser.runtime.connect("[email protected]");
myPort.onMessage.addListener((message) => {
console.log(`From Gretel: ${message.content}`);
});
browser.browserAction.onClicked.addListener(() => {
myPort.postMessage({ content: "Hello from Hansel" });
});
Gretel 侦听连接并检查发送方确实是 Hansel
js
let portFromHansel;
browser.runtime.onConnectExternal.addListener((port) => {
console.log(port);
if (port.sender.id === "[email protected]") {
console.log("connection attempt from Hansel");
portFromHansel = port;
portFromHansel.onMessage.addListener((message) => {
console.log(`From Hansel: ${message.content}`);
});
}
});
browser.browserAction.onClicked.addListener(() => {
portFromHansel.postMessage({ content: "Message from Gretel" });
});
注意:此 API 基于 Chromium 的chrome.runtime
API。本文档源自 Chromium 代码中的runtime.json
。