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 事件。
語法
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 傳送訊息。
// 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 傳送訊息。
// 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。