擴充功能服務 worker 支援標準服務 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 }); });
常見事件
擴充功能服務 worker 支援特定 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);
網路服務 worker 事件
擴充功能服務工作站支援的生命週期事件不限於其他位置所述。
ServiceWorkerGlobal.fetch
在從擴充功能套件擷取任何內容,或從擴充功能或彈出式指令碼呼叫 fetch()
和 XMLHttpRequest()
時觸發。(服務工作者 fetch
處理常式不會攔截內容指令碼的呼叫)。在後一種情況下,您必須將要擷取的網頁網址新增至 manifest.json
中的 "host_permissions"
鍵。
ServiceWorkerGlobal.message
除了擴充功能訊息傳遞功能外,您也可以使用服務工作者訊息傳遞功能,但這兩個系統無法互通。也就是說,使用 sendMessage()
傳送的訊息 (可透過多個擴充功能 API 取得) 不會遭到服務工作者訊息處理常式截斷。同樣地,使用 postMessage()
傳送的郵件也不會遭到擴充功能訊息處理常式攔截。擴充功能服務工作程支援這兩種訊息處理常式,也就是 ServiceWorkerGlobal.message
和 chrome.runtime.onMessage
。
除非您有使用服務工作程式訊息的具體原因,否則應優先使用擴充功能訊息。