说明
使用 chrome.alarms
API 可安排代码定期运行或在未来的指定时间运行。
权限
alarms
如需使用 chrome.alarms
API,请在manifest中声明 "alarms"
权限:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
概念和用法
为了确保可靠的行为,了解 API 的行为方式会很有帮助。
设备休眠
闹钟会在设备处于休眠状态时继续运行。不过,闹钟不会唤醒设备。设备唤醒后,所有错过的闹钟都会响铃。 重复闹钟最多会触发一次,然后系统会从设备唤醒时开始,使用指定的间隔时间重新安排闹钟,而不考虑闹钟最初设置为运行时已经经过的时间。
持久性
闹钟通常会一直保留,直到扩展程序更新为止。不过,我们无法保证这一点,闹钟可能会在浏览器重启时被清除。因此,请考虑在创建闹钟时在存储空间中设置一个值,然后确保在每次启动 Service Worker 时该值都存在。例如:
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 代码库安装 Alarm 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
属性
-
name
字符串
此闹钟的名称。
-
periodInMinutes
number 可选
如果不为 null,则表示闹钟是重复闹钟,并会在
periodInMinutes
分钟后再次触发。 -
scheduledTime
数值
此闹钟的预定触发时间,以从公元纪年开始计算的毫秒数表示(例如
Date.now() + n
)。出于性能方面的原因,闹钟可能会在此时间之后延迟任意时长。
AlarmCreateInfo
属性
-
delayInMinutes
number 可选
应在达到该时间时触发
onAlarm
事件的时长(以分钟为单位)。 -
periodInMinutes
number 可选
如果设置了 onAlarm 事件,则该事件应在
when
或delayInMinutes
指定的初始事件之后每periodInMinutes
分钟触发一次。如果未设置,闹钟只会触发一次。 -
什么时候
number 可选
闹钟应触发的时间(以自纪元以来的毫秒数表示,例如
Date.now() + n
)。
方法
clear()
chrome.alarms.clear(
name?: string,
callback?: function,
)
清除具有指定名称的闹钟。
参数
-
name
字符串(选填)
要清除的闹钟的名称。默认为空字符串。
-
callback
函数(可选)
callback
参数如下所示:(wasCleared: boolean) => void
-
wasCleared
布尔值
-
返回
-
Promise<boolean>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
clearAll()
chrome.alarms.clearAll(
callback?: function,
)
清除所有闹钟。
参数
-
callback
函数(可选)
callback
参数如下所示:(wasCleared: boolean) => void
-
wasCleared
布尔值
-
返回
-
Promise<boolean>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
callback?: function,
)
创建闹钟。在 alarmInfo
指定的时间附近,系统会触发 onAlarm
事件。如果有其他闹钟具有相同的名称(如果未指定名称,则没有名称),系统会取消该闹钟并将其替换为此闹钟。
为了减轻用户机器上的负载,Chrome 限制闹钟最多每 30 秒响一次,但可能会将闹钟延迟任意时长。也就是说,将 delayInMinutes
或 periodInMinutes
设置为小于 0.5
的值将不会被接受,并会导致警告。when
可设置为“现在”后不到 30 秒,且不会发出警告,但实际上至少需要 30 秒才会触发闹钟。
为帮助您调试应用或扩展程序,当您以未解压缩的方式加载它们时,闹钟可以无限次触发。
参数
-
name
字符串(选填)
用于标识此闹钟的可选名称。默认为空字符串。
-
alarmInfo
描述闹钟应在何时触发。初始时间必须由
when
或delayInMinutes
指定(但不能同时指定这两者)。如果设置了periodInMinutes
,则闹钟会在初始事件发生后每periodInMinutes
分钟重复一次。如果未为重复闹钟设置when
或delayInMinutes
,则系统会将periodInMinutes
用作delayInMinutes
的默认值。 -
callback
函数(可选)
Chrome 111 及更高版本callback
参数如下所示:() => void
返回
-
Promise<void>
Chrome 111 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
get()
chrome.alarms.get(
name?: string,
callback?: function,
)
检索指定闹钟的详细信息。
参数
返回
-
Promise<Alarm | undefined>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
getAll()
chrome.alarms.getAll(
callback?: function,
)
获取所有闹钟的数组。
返回
-
Promise<Alarm[]>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。