下面给你整理一份 《Chrome Extension 开发定时任务插件全流程指南》,覆盖开发思路、核心 API、示例代码和注意事项,帮助你快速实现 Chrome 插件中的定时任务功能。
Chrome Extension 定时任务插件开发指南
在 Chrome Extension 中实现定时任务,常用于:
- 定期抓取数据
- 自动刷新页面
- 定时提醒用户
Chrome 提供 alarms API,可以在插件后台运行定时任务,无需依赖网页。
一、Chrome Extension 定时任务基础概念
| 概念 | 说明 |
|---|---|
| background script | 插件后台运行脚本,可持续监听事件和定时任务 |
| content script | 注入到网页中的脚本,操作网页 DOM |
| alarms API | 定时任务 API,可设置单次或周期任务 |
| manifest.json | 插件配置文件,声明权限、脚本和图标等 |
二、manifest.json 配置
Chrome Extension v3 推荐使用 Manifest V3:
{
"manifest_version": 3,
"name": "定时任务插件示例",
"version": "1.0",
"description": "Chrome Extension 定时任务插件",
"permissions": [
"alarms",
"storage"
],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"
}
}
}
关键点:
- permissions 必须包含
"alarms" - background.service_worker 指向后台脚本
- Manifest V3 中不再使用
background.page
三、background.js 核心实现
1. 创建定时任务
// 创建周期性定时任务,每 5 分钟执行一次
chrome.alarms.create("myAlarm", {
periodInMinutes: 5
});
// 创建一次性定时任务,10 分钟后执行
chrome.alarms.create("oneTimeAlarm", {
delayInMinutes: 10
});
2. 监听定时任务
chrome.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === "myAlarm") {
console.log("定时任务触发:每 5 分钟执行一次");
doPeriodicTask();
}
if (alarm.name === "oneTimeAlarm") {
console.log("一次性任务触发");
doOneTimeTask();
}
});
function doPeriodicTask() {
// 这里写你的定时任务逻辑
console.log("执行周期性任务,比如抓取数据");
}
function doOneTimeTask() {
console.log("执行一次性任务");
}
四、popup.html 示例(可手动控制任务)
<!DOCTYPE html>
<html>
<head>
<title>定时任务控制</title>
</head>
<body>
<button id="start">启动定时任务</button>
<button id="stop">停止定时任务</button>
<script src="popup.js"></script>
</body>
</html>
五、popup.js 控制后台定时任务
document.getElementById("start").addEventListener("click", () => {
chrome.alarms.create("myAlarm", { periodInMinutes: 5 });
alert("定时任务已启动");
});
document.getElementById("stop").addEventListener("click", () => {
chrome.alarms.clear("myAlarm", (wasCleared) => {
if (wasCleared) alert("定时任务已停止");
});
});
六、常见应用场景
- 定时抓取网页数据
- 使用
fetch()在后台获取数据 - 存储到
chrome.storage.local
- 使用
- 定时刷新标签页
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { chrome.tabs.reload(tabs[0].id); }); - 定时提醒用户
- 可结合
notificationsAPI - 每隔固定时间弹出提醒
- 可结合
七、注意事项
- Manifest V3 background 脚本是 service_worker
- 不支持长期常驻
- 只能在事件触发时运行
alarmsAPI 会唤醒 service worker
- Chrome 限制最小周期
periodInMinutes最小为 1 分钟- 小于 1 分钟的定时任务可能不触发
- 持久存储
- 定时任务的状态可用
chrome.storage保存 - 例如存储上次执行时间或任务状态
- 定时任务的状态可用
- 调试技巧
- 打开 Chrome 扩展页面 → 点击 background page 查看日志
- 使用
console.log()追踪任务触发情况
八、完整插件目录结构示例
my-timer-extension/
│
├─ manifest.json
├─ background.js
├─ popup.html
├─ popup.js
├─ icon16.png
├─ icon48.png
└─ icon128.png
九、扩展功能建议
- 支持多任务管理,每个任务可单独设置周期
- 结合
chrome.notifications或badge提示任务状态 - 使用
chrome.storage保存用户配置,支持自定义周期 - 配合 content script 操作网页 DOM,实现自动化行为
发表回复