跳到主要内容

alarms 闹钟

安排代码周期性地或者在将来的指定时间运行

权限设置

"permissions": [
"alarms"
],

方法

创建闹钟

创建闹钟,如果已存在,则会更新 减少用户计算机上的负载,Chrome 将警报限制为最多每 30 秒一次

// 闹钟名字
type alarmName = string;

// 闹钟信息
// 闹钟触发时间: {when}ms时触发 / {delayInMinutes}分钟后触发
// 闹钟周期: 每{periodInMinutes}分钟触发一次
type alarmInfo = {
// 闹钟触发时间,单位:毫秒
when: number;
// x分钟后触发,单位:分钟
delayInMinutes: number;
// 闹钟每x分钟触发一次(when/delayInMinutes初始事件之后开始算)
periodInMinutes: number;
}

chrome.alarms.create(alarmName, alarmInfo);
// background.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(MY_ALARM, {
// 闹钟周期,单位:分钟
periodInMinutes: 1,
// 闹钟触发时间,单位:毫秒
when: Date.now() + 1000 * 60 * 1,
});
});

clear()方法

清除闹钟

// background.js
chrome.alarms.clear(MY_ALARM, (wasCleared) => {
console.log('🍄 background: >>>>>>>>>>>>>>>>>> 清除闹钟', Date.now(), wasCleared);
});

// 清除所有闹钟
chrome.alarms.clearAll((wasCleared) => {
console.log('🍄 background: >>>>>>>>>>>>>>>>>> 清除所有闹钟', Date.now(), wasCleared);
});

get()方法

获取闹钟

// background.js
chrome.alarms.get(MY_ALARM, (alarm) => {
console.log('🍄 background: >>>>>>>>>>>>>>>>>> 获取闹钟', Date.now(), alarm);
});

// 获取所有闹钟
chrome.alarms.getAll((alarms) => {
console.log('🍄 background: >>>>>>>>>>>>>>>>>> 获取所有闹钟', Date.now(), alarms);
});

事件

onAlarm事件

监听闹钟触发事件

// background.js
chrome.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === MY_ALARM) {
console.log('🍄 background: >>>>>>>>>>>>>>>>>> 监听闹钟触发事件', Date.now(), alarm);
}
});

示例

检测闹钟的持续性

闹钟在浏览器关闭后会被清除,如果需要持续性,需要在background.js中重新注册

// background.js
const STORAGE_KEY = "ALARM_ENABLED";
const MY_ALARM = "my-alarm";

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();