擴充功能服務工作站支援標準 Service Worker 事件,以及擴充功能 API 中的許多事件。本節將說明可用的功能,並提供相關使用訣竅。
宣告擴充功能事件
服務工作站中的事件處理常式必須在全域範圍內進行宣告,也就是說,這些處理常式應位於指令碼頂層,而非函式中的巢狀結構。這可確保在初次執行指令碼時同步註冊這些憑證,讓 Chrome 在開始時立即將事件分派給服務工作處理程序。例如:
chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); chrome.action.onClicked.addListener(handleActionClick); });
chrome.action.onClicked.addListener(handleActionClick); chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); });
常見事件
擴充功能服務工作站支援特定 API 中的事件。以下說明幾個常見的問題。請注意,其中有些 API 需要使用權限才能使用,而有些 API 的事件、方法或屬性可能不適用於部分 Chrome 版本。詳情請參閱已連結的 API 說明文件,尤其是您要使用的事件、方法或屬性。
chrome.action
- 在使用者與擴充功能工具列圖示互動時觸發。無論動作是在特定網頁 (分頁) 還是整個擴充功能上,系統都會觸發。
chrome.management
- 提供與安裝、解除安裝、啟用和停用擴充功能相關的事件。
chrome.notifications
- 提供與擴充功能產生的系統通知互動的使用者互動事件。
chrome.permissions
- 指出使用者授予或撤銷擴充功能權限的時間。
chrome.runtime
- 提供與擴充功能生命週期相關的事件、擴充功能其他部分傳送的訊息,以及可用擴充功能或 Chrome 更新的通知。
chrome.storage.onChanged
- 每當您清除任何
StorageArea
物件,或是鍵的值變更或設定時,就會觸發。請注意,每個StorageArea
執行個體都有專屬的onChanged
事件。 chrome.webNavigation
- 提供飛行中導航要求的狀態資訊。
篩選器
如要將事件限制在特定用途,或排除不必要的事件呼叫,請使用支援事件篩選器的 API。舉例來說,假設你要監聽 tabs.onUpdated
事件的擴充功能,偵測使用者前往特定網站的時機。每個分頁每次導覽都會呼叫此事件。請改用 webNavigation.onCompleted
搭配篩選器。例如:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
chrome.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
Web Service Worker 事件
擴充功能服務工作站支援的生命週期超過其他說明的生命週期事件。
ServiceWorkerGlobal.fetch
從擴充功能套件擷取任何內容,或從擴充功能或彈出式視窗指令碼呼叫 fetch()
和 XMLHttpRequest()
時觸發。(服務工作站 fetch
處理常式不會攔截來自內容指令碼的呼叫)。若是第二種情況,您必須將要擷取的網頁網址新增到 manifest.json
中的 "host_permissions"
鍵。
ServiceWorkerGlobal.message
Service Worker 訊息傳遞除了可以使用擴充功能的訊息傳遞之外,但這兩個系統無法互通。也就是說,使用 sendMessage()
(可從多個擴充功能 API 取得) 傳送的訊息不會遭到 Service Worker 訊息處理常式攔截。同樣地,使用 postMessage()
傳送的訊息不會遭到擴充功能訊息處理常式攔截。擴充功能服務工作站支援這兩種訊息處理常式 (包括 ServiceWorkerGlobal.message
和 chrome.runtime.onMessage
)。
除非您有使用 Service Worker 訊息的具體原因,否則建議您優先使用擴充功能訊息。