说明
您可以使用 chrome.alarms API 安排代码定期运行,或在未来的指定时间运行。
权限
alarms如需使用 chrome.alarms API,请在 清单中声明 "alarms" 权限:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
概念和用法
为了确保行为可靠,了解 API 的行为方式很有帮助。
设备睡眠
闹钟在设备处于睡眠状态时会继续运行。不过,闹钟不会唤醒设备。当设备唤醒时,所有错过的闹钟都会触发。 重复闹钟最多会触发一次,然后使用指定的时间间隔重新安排,从设备唤醒时开始计算,不考虑闹钟最初设置为运行后已过去的时间。
持久性
闹钟通常会一直存在,直到扩展程序更新为止。不过,这无法保证,并且在浏览器重启时,闹钟可能会被清除。因此,请确保每次 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 中设置 alarm:
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
数值 (可选)
如果不是 null,则闹钟是重复闹钟,并且会在
periodInMinutes分钟后再次触发。 -
persistAcrossSessions
布尔值
待处理闹钟是否应在会话(浏览器重启)之间保持不变。
-
scheduledTime
数值
此闹钟计划触发的时间,以自纪元以来的毫秒数表示(例如
Date.now() + n)。出于性能考虑,闹钟可能会延迟任意时间。
AlarmCreateInfo
属性
-
delayInMinutes
数值 (可选)
onAlarm事件应在多少分钟后触发。 -
periodInMinutes
数值 (可选)
如果设置了此属性,则在
when或delayInMinutes指定的初始事件之后,onAlarm 事件应每periodInMinutes分钟触发一次。如果未设置此属性,闹钟将仅触发一次。 -
persistAcrossSessions
布尔值(可选)
待处理闹钟是否应在会话(浏览器重启)之间保持不变。在 Chrome 中,此属性默认为 true,以匹配历史行为,但您应明确设置此属性,以最大限度地提高跨浏览器的兼容性。
-
when
数值 (可选)
闹钟应触发的时间,以自纪元以来的毫秒数表示(例如
Date.now() + n)。
方法
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
清除具有指定名称的闹钟。
参数
-
name
字符串 (可选)
要清除的闹钟的名称。默认为空字符串。
返回
-
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 秒内触发。
为了帮助您调试应用或扩展程序,当您以未打包的方式加载应用或扩展程序时,alarm 的触发频率没有限制。
参数
-
name
字符串 (可选)
用于标识此闹钟的可选名称。默认为空字符串。
-
alarmInfo
描述闹钟应触发的时间。初始时间必须由
when或delayInMinutes指定(但不能同时指定两者)。如果设置了periodInMinutes,则闹钟将在初始事件后每periodInMinutes分钟重复一次。如果未为重复闹钟设置when或delayInMinutes,则periodInMinutes将用作delayInMinutes的默认值。
返回
-
Promise<void>
Chrome 111 及更高版本闹钟创建后解析的 Promise。
参数
-
name
字符串 (可选)
要获取的闹钟的名称。默认为空字符串。
返回
-
Promise<Alarm | undefined>
Chrome 91 及更高版本
返回
-
Promise<Alarm[]>
Chrome 91 及更高版本