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