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