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 语法
参数
function-
当此事件发生时调用的函数。该函数将传递此参数
port-
一个
runtime.Port对象,连接当前脚本与它正在连接的另一个扩展程序。
示例
在此示例中,Hansel 扩展程序连接到 Gretel 扩展程序
js
console.log("connecting to Gretel");
let myPort = browser.runtime.connect("gretel@mozilla.org");
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 === "hansel@mozilla.org") {
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。