說明
使用 chrome.alarms API 安排程式碼定期執行,或在未來指定時間執行。
權限
alarms如要使用 chrome.alarms API,請在資訊清單中宣告 "alarms" 權限:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
概念和用法
為確保行為可靠,瞭解 API 的行為很有幫助。
裝置休眠
裝置進入休眠狀態時,鬧鐘仍會繼續運作,但不會喚醒裝置。裝置喚醒後,系統會觸發所有錯過的鬧鐘。重複鬧鐘最多會觸發一次,然後從裝置喚醒時開始,按照指定時間間隔重新排定鬧鐘,不會將鬧鐘原先設定的觸發時間納入考量。
持續性
您可以在建立鬧鐘時使用 persistAcrossSessions 標記,控制鬧鐘的持續時間。這項標記可以設為 true (持續到擴充功能更新為止) 或 false (擴充功能重新載入或瀏覽器重新啟動時清除,以及擴充功能更新時清除)。
其他瀏覽器和舊版 Chrome
其他瀏覽器 (問題) 或 Chrome 150 之前的版本不支援這項屬性,因此行為可能無法預測。因此,最好在每次啟動 Service Worker 時,確認重要警報存在。例如:
async function checkAlarmState() {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
如果鬧鐘是根據使用者動作動態建立,您可能需要在其他位置儲存鬧鐘建立資訊,以便在需要時重新建立鬧鐘。
範例
以下範例說明如何使用及回應鬧鐘。如要試用這個 API,請從 chrome-extension-samples 存放區安裝 Alarm API 範例。
設定鬧鐘
以下範例會在安裝新版擴充功能時,於 Service Worker 中設定鬧鐘:
service-worker.js:
chrome.runtime.onInstalled.addListener(async ({ reason }) => {
// Create an alarm so we have something to look at in the demo
await chrome.alarms.create('demo-default-alarm', {
delayInMinutes: 1,
periodInMinutes: 1,
persistAcrossSessions: true
});
});
回應警報
以下範例會根據觸發警報的名稱,設定動作工具列圖示。
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
類型
Alarm
屬性
-
名稱
字串
這項鬧鐘的名稱。
-
periodInMinutes
數字 選填
如果不是空值,表示鬧鐘是週期性鬧鐘,會在
periodInMinutes分鐘後再次響起。 -
persistAcrossSessions
布林值
待處理鬧鐘是否應在工作階段 (重新啟動瀏覽器) 之間保留。
-
scheduledTime
數字
這個鬧鐘預定觸發的時間,以自 Epoch 以來的毫秒數表示 (例如
Date.now() + n)。基於效能考量,鬧鐘可能會延遲任意時間。
AlarmCreateInfo
屬性
-
delayInMinutes
數字 選填
onAlarm事件應在幾分鐘後觸發。 -
periodInMinutes
數字 選填
如果已設定,onAlarm 事件應在
when或delayInMinutes指定的初始事件後,每隔periodInMinutes分鐘觸發一次。如果未設定,鬧鐘只會觸發一次。 -
persistAcrossSessions
布林值 選填
待處理鬧鐘是否應在工作階段 (瀏覽器重新啟動) 之間保持運作。在 Chrome 中,這項設定預設為 true,以符合先前的行為,但您應明確設定這項設定,盡可能確保瀏覽器之間的相容性。
-
時段
數字 選填
鬧鐘應觸發的時間,以 Epoch 時間之後的毫秒數表示 (例如
Date.now() + n)。
方法
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
清除指定名稱的鬧鐘。
參數
-
名稱
字串 選填
要清除的鬧鐘名稱。預設為空字串。
傳回
-
Promise<boolean>
Chrome 91 以上版本
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
清除所有鬧鐘。
傳回
-
Promise<boolean>
Chrome 91 以上版本
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
設定鬧鐘。在 alarmInfo 指定的時間附近,系統會觸發 onAlarm 事件。如果已有同名鬧鐘 (或未指定名稱),系統會取消該鬧鐘,並以這個鬧鐘取而代之。
為減少使用者電腦的負載,Chrome 會限制每 30 秒最多觸發一次鬧鐘,但可能會任意延遲鬧鐘。也就是說,如果將 delayInMinutes 或 periodInMinutes 設為小於 0.5,系統不會採用該值,並會發出警告。when 可以設定為「現在」之後不到 30 秒,系統不會發出警告,但鬧鐘至少要過 30 秒才會響鈴。
為協助您偵錯應用程式或擴充功能,載入未封裝的應用程式或擴充功能後,鬧鐘的觸發頻率不受限制。
參數
-
名稱
字串 選填
用來識別這項警報的選填名稱。預設為空白字串。
-
alarmInfo
說明鬧鐘應觸發的時間。初始時間必須由
when或delayInMinutes指定 (但不能同時指定)。如果設定periodInMinutes,鬧鐘會在初始事件發生後每periodInMinutes分鐘重複一次。如果未設定重複鬧鐘的when或delayInMinutes,系統會預設使用periodInMinutes做為delayInMinutes。
傳回
-
Promise<void>
Chrome 111 以上版本鬧鐘建立完成時會解析的 Promise。
參數
-
名稱
字串 選填
要取得的鬧鐘名稱。預設為空字串。
傳回
-
Promise<Alarm | undefined>
Chrome 91 以上版本
傳回
-
Promise<Alarm[]>
Chrome 91 以上版本