【作者主页】:小鱼神1024
【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等
chrome.alarms API 允许你安排代码在未来的某个时间点或周期性地运行。
使用 chrome.alarms 之前,要在 manifest文件中声明权限:
{
"manifest_version": 3,
"name": "chrome.alarms",
"description": "chrome.alarms API 基础用法",
"version": "1.0",
"action": {
"default_popup": "popup.html",
"default_icon": "icons/icon128.png"
},
"permissions": [
"alarms"
],
"background": {
"service_worker": "background.js"
}
}
1、创建闹钟和监听闹钟
我们如果想在扩展安装时,创建一个闹钟,并每分钟执行一次,可以在 background.js 中这样写:
chrome.runtime.onInstalled.addListener(function () {
chrome.alarms.create("alarm-name", {
delayInMinutes: 1, // 在1分钟后触发
periodInMinutes: 1, // 每1分钟重复触发
});
chrome.alarms.onAlarm.addListener(function (alarm) {
console.log(
"Alarm '" + alarm.name + "' triggered at " + new Date(alarm.scheduledTime)
);
});
});
其中 delayInMinutes:表示延迟时间,单位为分钟;
periodInMinutes:表示执行周期时间,单位为分钟;
为了更好的演示,我们将其调整为:一秒执行一次
chrome.runtime.onInstalled.addListener(function () {
chrome.alarms.create("alarm-name", {
delayInMinutes: 0, // 立即执行
periodInMinutes: 1 / 60, // 每1秒执行
});
chrome.alarms.onAlarm.addListener(function (alarm) {
console.log(
"Alarm '" + alarm.name + "' triggered at " + new Date(alarm.scheduledTime)
);
});
});
先看效果如下:
在开发阶段,可以设置执行周期为1秒。但是从 Chrome 120 开始,为了减少用户计算机的负载,Chrome 将闹钟限制为每 30 秒最多一次。
2、获取指定闹钟
如果要获取指定闹钟信息,可以这样写:
chrome.alarms.get("alarm-name", function (alarm) {
if (alarm) {
console.log(alarm);
}
});
输出内容为:
3、获取所有闹钟
如果创建了多个闹钟,也可以获取到所有的闹钟,如下:
chrome.alarms.create("alarm-name-1", {
delayInMinutes: 1, // 立即执行
periodInMinutes: 1, // 每1秒执行
});
chrome.alarms.create("alarm-name-2", {
delayInMinutes: 1, // 立即执行
periodInMinutes: 1, // 每1秒执行
});
chrome.alarms.getAll((alarms) => {
console.log(alarms);
});
创建了两个闹钟,分别为:alarm-name-1 和 alarm-name-2
通过 chrome.alarms.getAll 可以获取到所有闹钟
打印结果如下:
4、清除指定闹钟
清除指定闹钟,可以使用:chrome.alarms.clear
chrome.alarms.create("alarm-name-1", {
delayInMinutes: 1, // 立即执行
periodInMinutes: 1, // 每1秒执行
});
chrome.alarms.create("alarm-name-2", {
delayInMinutes: 1, // 立即执行
periodInMinutes: 1, // 每1秒执行
});
chrome.alarms.getAll((alarms) => {
console.log("第一次打印所有闹钟", alarms);
});
chrome.alarms.clear("alarm-name-1", function (wasCleared) {
if (wasCleared) {
console.log("alarm-name-1 闹钟已清除");
}
});
chrome.alarms.getAll((alarms) => {
console.log("第二次打印所有闹钟", alarms);
});
我们先创建两个闹钟,然后打印出所有的闹钟。
为了验证删除指定闹钟,我们再执行 chrome.alarms.clear 来删除 alarm-name-1 闹钟
之后再打印所有的闹钟,结果如下:
alarm-name-1 闹钟确实被删除了。
5、清除所有闹钟
清除所有闹钟更简单了,只需要使用:chrome.alarms.clearAll
上述例子,稍微改造下:
chrome.alarms.create("alarm-name-1", {
delayInMinutes: 1, // 立即执行
periodInMinutes: 1, // 每1秒执行
});
chrome.alarms.create("alarm-name-2", {
delayInMinutes: 1, // 立即执行
periodInMinutes: 1, // 每1秒执行
});
chrome.alarms.getAll((alarms) => {
console.log("第一次打印所有闹钟", alarms);
});
chrome.alarms.clearAll(function (wasCleared) {
if (wasCleared) {
console.log("所有闹钟已清除");
}
});
chrome.alarms.getAll((alarms) => {
console.log("第二次打印所有闹钟", alarms);
});
打印结果如下:
可以清楚的看到,所有的闹钟都被清除了。
代码地址:传送门
总结
- 声明权限:在 manifest.json 中声明 alarms 权限
- 创建闹钟:chrome.alarms.create
- 监听闹钟:chrome.alarms.onAlarm.addListener
- 获取指定闹钟:chrome.alarms.get
- 获取所有闹钟:chrome.alarms.getAll
- 清除指定闹钟:chrome.alarms.clear
- 清除所有闹钟:chrome.alarms.clearAll
创作不易,动动您发财的小手,点赞关注一波,支持我创作更多对您有帮助的文章!