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