浏览器扩展V3开发系列之 chrome.alarms 定时闹钟的用法和案例

【作者主页】:小鱼神1024

【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等

chrome.alarms API 允许你安排代码在未来的某个时间点或周期性地运行。

使用 chrome.alarms 之前,要在 manifest文件中声明权限:
image.png

{
  "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 中这样写:
image.png

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

先看效果如下:
5.gif
在开发阶段,可以设置执行周期为1秒。但是从 Chrome 120 开始,为了减少用户计算机的负载,Chrome 将闹钟限制为每 30 秒最多一次。

2、获取指定闹钟

如果要获取指定闹钟信息,可以这样写:
image.png

  chrome.alarms.get("alarm-name", function (alarm) {
    if (alarm) {
      console.log(alarm);
    }
  });

输出内容为:
image.png

3、获取所有闹钟

如果创建了多个闹钟,也可以获取到所有的闹钟,如下:
image.png

  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 可以获取到所有闹钟
打印结果如下:
image.png

4、清除指定闹钟

清除指定闹钟,可以使用:chrome.alarms.clear
image.png

  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 闹钟
之后再打印所有的闹钟,结果如下:
image.png
alarm-name-1 闹钟确实被删除了。

5、清除所有闹钟

清除所有闹钟更简单了,只需要使用:chrome.alarms.clearAll

上述例子,稍微改造下:
image.png

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

打印结果如下:
image.png
可以清楚的看到,所有的闹钟都被清除了。

代码地址:传送门

总结
  • 声明权限:在 manifest.json 中声明 alarms 权限
  • 创建闹钟:chrome.alarms.create
  • 监听闹钟:chrome.alarms.onAlarm.addListener
  • 获取指定闹钟:chrome.alarms.get
  • 获取所有闹钟:chrome.alarms.getAll
  • 清除指定闹钟:chrome.alarms.clear
  • 清除所有闹钟:chrome.alarms.clearAll

创作不易,动动您发财的小手,点赞关注一波,支持我创作更多对您有帮助的文章!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值