runtime.connect()

在擴充套件程式中的不同上下文之間建立連線。

你可以在以下位置呼叫此方法:

  • 在擴充套件程式的content scripts中,用於與擴充套件程式的background scripts(或特權類似的指令碼,如popup scripts或options page scripts)建立連線。
  • 在擴充套件程式的background scripts(或特權類似的指令碼)中,用於與另一個擴充套件程式建立連線。

請注意,你不能使用此函式連線擴充套件程式與其content scripts。要實現此目的,請使用 tabs.connect()

預設情況下,此連線允許擴充套件程式與其自身或其他任何擴充套件程式(如果指定了 extensionId)交換訊息。但是,可以使用 externally_connectable manifest 鍵將通訊限制為特定擴充套件程式,並啟用與網站的通訊。擴充套件程式內部的連線會觸發 runtime.onConnect 事件,來自其他擴充套件程式或網頁的連線會觸發 runtime.onConnectExternal 事件。

語法

js
let port = browser.runtime.connect(
  extensionId, // optional string
  connectInfo  // optional object
)

引數

extensionId 可選

string。要連線的擴充套件程式的 ID。如果目標使用 manifest.json 中的 browser_specific_settings 鍵顯式設定了 ID,則 extensionId 應為該值。否則,它應為為目標生成的 ID。

connectInfo 可選

object。連線的詳細資訊

name 可選

string。將傳遞給正在監聽連線事件的程序的 runtime.onConnect

includeTlsChannelId 可選

boolean。是否將 TLS 通道 ID 傳遞給正在監聽連線事件的程序的 runtime.onConnectExternal

返回值

runtime.Port。用於傳送和接收訊息的埠。如果擴充套件程式不存在,則會觸發埠的 onDisconnect 事件。

示例

此內容指令碼

  • 連線到 background script,並將 Port 儲存在名為 myPort 的變數中。
  • 監聽 myPort 上的訊息並記錄它們。
  • 當用戶點選文件時,使用 myPort 向 background script 傳送訊息。
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!" });
});

相應的後臺指令碼

  • 監聽來自 content script 的連線嘗試。

  • 當收到連線嘗試時

    • 將埠儲存在名為 portFromCS 的變數中。
    • 使用該埠向 content script 傳送訊息。
    • 開始監聽透過埠接收到的訊息,並記錄它們。
  • 當用戶點選擴充套件程式的 browser action 時,使用 portFromCS 向 content script 傳送訊息。

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