runtime.onConnect

當與擴充套件程序或內容指令碼建立連線時觸發。

語法

js
browser.runtime.onConnect.addListener(listener)
browser.runtime.onConnect.removeListener(listener)
browser.runtime.onConnect.hasListener(listener)

事件有三個函式

addListener(listener)

向此事件新增監聽器。

removeListener(listener)

停止監聽此事件。listener 引數是要移除的監聽器。

hasListener(listener)

檢查此事件是否已註冊 listener。如果正在偵聽,則返回 true,否則返回 false

addListener 語法

引數

function

當此事件發生時呼叫的函式。該函式將傳遞此引數

port

一個 runtime.Port 物件,用於連線當前指令碼與正在連線的另一個上下文。

示例

此內容指令碼

  • 連線到後臺指令碼,並將 Port 儲存在名為 myPort 的變數中
  • 監聽 myPort 上的訊息,並記錄它們
  • 當用戶點選文件時,使用 myPort 向後臺指令碼傳送訊息
js
// content-script.js

let myPort = browser.runtime.connect({ name: "port-from-cs" });
myPort.postMessage({ greeting: "hello from content script" });

myPort.onMessage.addListener((m) => {
  console.log("In content script, received message from background script: ");
  console.log(m.greeting);
});

document.body.addEventListener("click", () => {
  myPort.postMessage({ greeting: "they clicked the page!" });
});

相應的後臺指令碼

  • 監聽來自內容指令碼的連線嘗試

  • 當收到連線嘗試時

    • 將埠儲存在名為 portFromCS 的變數中
    • 使用埠向內容指令碼傳送訊息
    • 開始監聽埠接收到的訊息,並記錄它們
  • 當用戶點選擴充套件的瀏覽器操作時,使用 portFromCS 向內容指令碼傳送訊息

js
// background-script.js

let portFromCS;

function connected(p) {
  portFromCS = p;
  portFromCS.postMessage({ greeting: "hi there content script!" });
  portFromCS.onMessage.addListener((m) => {
    console.log("In background script, received message from content script");
    console.log(m.greeting);
  });
}

browser.runtime.onConnect.addListener(connected);

browser.browserAction.onClicked.addListener(() => {
  portFromCS.postMessage({ greeting: "they clicked the button!" });
});

瀏覽器相容性

注意:此 API 基於 Chromium 的 chrome.runtime API。本文件源自 Chromium 程式碼中的 runtime.json