說明
使用 chrome.alarms
API 排定程式碼,以便定期執行或在未來的特定時間執行。
權限
alarms
如要使用 chrome.alarms
API,請在manifest中宣告 "alarms"
權限:
{ "name": "My extension", ... "permissions": [ "alarms" ], ... }
概念和用法
為確保可靠的行為,建議您瞭解 API 的運作方式。
裝置休眠
裝置在休眠狀態時,鬧鐘會繼續運作。不過,鬧鐘不會喚醒裝置。裝置喚醒時,系統會觸發所有未響起的鬧鐘。重複鬧鐘最多會觸發一次,然後會從裝置喚醒開始,以指定的時間間隔重新排定鬧鐘,但不會考量鬧鐘原本設定的執行時間已過的時間。
持續性
警報通常會持續存在,直到擴充功能更新為止。不過,我們無法保證這項功能,且瀏覽器重新啟動時,鬧鐘可能會遭到清除。因此,建議您在建立鬧鐘時在儲存空間中設定值,然後確保每次服務工作者啟動時都會存在該值。例如:
const STORAGE_KEY = "user-preference-alarm-enabled"; async function checkAlarmState() { const { alarmEnabled } = await chrome.storage.get(STORAGE_KEY); if (alarmEnabled) { const alarm = await chrome.alarms.get("my-alarm"); if (!alarm) { await chrome.alarms.create({ periodInMinutes: 1 }); } } } checkAlarmState();
範例
以下範例說明如何使用及回應鬧鐘。如要試用這個 API,請從 chrome-extension-samples 存放區安裝鬧鐘 API 範例。
設定鬧鐘
以下範例會在安裝擴充功能時,在服務工作站中設定鬧鐘:
service-worker.js:
chrome.runtime.onInstalled.addListener(async ({ reason }) => { if (reason !== 'install') { return; } // Create an alarm so we have something to look at in the demo await chrome.alarms.create('demo-default-alarm', { delayInMinutes: 1, periodInMinutes: 1 }); });
回應警報
以下範例會根據已響起的鬧鐘名稱,設定動作工具列圖示。
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => { chrome.action.setIcon({ path: getIconPath(alarm.name), }); });
類型
Alarm
屬性
- 名稱
字串
鬧鐘名稱。
- periodInMinutes
號碼 選填
如果不為空值,鬧鐘就會重複響鈴,並在
periodInMinutes
分鐘後再次響起。 - scheduledTime
數字
這個鬧鐘的排定觸發時間,以自紀元起算的毫秒為單位 (例如
Date.now() + n
)。基於效能考量,鬧鐘可能會延遲指定時間。
AlarmCreateInfo
屬性
- delayInMinutes
號碼 選填
onAlarm
事件應觸發的時間長度 (以分鐘為單位)。 - periodInMinutes
號碼 選填
如果已設定,則在
when
或delayInMinutes
指定的初始事件發生後,onAlarm 事件應每隔periodInMinutes
分鐘觸發一次。如未設定,鬧鐘只會觸發一次。 - 時段
號碼 選填
鬧鐘應觸發的時間,以 Epoch 紀元時間 (例如
Date.now() + n
) 起算的毫秒數表示。
方法
clear()
chrome.alarms.clear(
name?: string,
callback?: function,
)
清除鬧鐘 (具有指定名稱)。
參數
- 名稱
string 選填
要清除的鬧鐘名稱。預設為空字串。
- 回呼
函式 選填
callback
參數如下所示:(wasCleared: boolean) => void
- wasCleared
布林值
-
傳回
-
Promise<boolean>
Chrome 91 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。
clearAll()
chrome.alarms.clearAll(
callback?: function,
)
清除所有鬧鐘。
參數
- 回呼
函式 選填
callback
參數如下所示:(wasCleared: boolean) => void
- wasCleared
布林值
-
傳回
-
Promise<boolean>
Chrome 91 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
callback?: function,
)
建立鬧鐘。在 alarmInfo
指定的時間附近,系統會觸發 onAlarm
事件。如果有其他鬧鐘的名稱與此鬧鐘相同 (如果未指定名稱,則為無名稱),系統會取消該鬧鐘並以此鬧鐘取代。
為了減少使用者電腦的負載,Chrome 會將鬧鐘限制為每 30 秒最多一次,但可能會再延遲任意時間。也就是說,如果將 delayInMinutes
或 periodInMinutes
設為小於 0.5
,系統將不會採用,並會顯示警告。when
可以設為「現在」後的 30 秒內,但不會在 30 秒內觸發鬧鐘。
為了協助您對應用程式或擴充功能進行偵錯,在您載入未解壓縮的應用程式或擴充功能時,鬧鐘觸發的頻率沒有限制。
參數
- 名稱
string 選填
用於識別鬧鐘的選用名稱。預設為空字串。
- alarmInfo
說明鬧鐘應觸發的時機。初始時間必須由
when
或delayInMinutes
指定 (但不能同時指定)。如果設定periodInMinutes
,鬧鐘會在初始事件發生後每隔periodInMinutes
分鐘重複一次。如果重複鬧鐘未設定when
或delayInMinutes
,系統會使用periodInMinutes
做為delayInMinutes
的預設值。 - 回呼
函式 選填
Chrome 111 以上版本callback
參數如下所示:() => void
傳回
-
Promise<void>
Chrome 111 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。
get()
chrome.alarms.get(
name?: string,
callback?: function,
)
擷取指定鬧鐘的詳細資料。
傳回
-
Promise<Alarm | undefined>
Chrome 91 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。
getAll()
chrome.alarms.getAll(
callback?: function,
)
取得所有鬧鐘的陣列。
傳回
-
Promise<Alarm[]>
Chrome 91 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。