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。