// background.js (Manifest V3 版本)
// 扩展安装时触发的监听事件(V3 中无需额外修改,语法兼容)
chrome.runtime.onInstalled.addListener(() => {
console.log("Auto Clicker extension installed");
});
// 标签页更新事件监听(核心逻辑适配 V3)
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
// 仅在标签页加载完成后执行脚本(保持原逻辑)
if (changeInfo.status === 'complete') {
// Manifest V3 中使用
chrome.scripting.executeScript 替代原 chrome.tabs.executeScript
chrome.scripting.executeScript({
target: { tabId: tabId }, // 指定目标标签页
files: ['contentqw.js'] // 注入的脚本文件(原 contentqw.js 逻辑不变)
}).catch(err => {
// 捕获并输出可能的错误(如权限问题、脚本不存在等,便于调试)
console.error("Failed to execute content script:", err);
});
// 原注释中的 setTimeout 逻辑(如需启用,取消注释下方代码并确保符合 V3 规范)
/*
setTimeout(() => {
chrome.scripting.executeScript({
target: { tabId: tabId },
files: ['content.js'] // 注意:需确保 content.js 存在且在 manifest.json 中声明
});
}, 1000 * 60 * 1); // 60秒后执行(保持原定时逻辑)
*/
}
});
关键修改说明(Manifest V3 适配点):
1. 背景页机制变更:
V3 中 `background.js` 运行在 Service Worker 环境中(取代 V2 的 `background.page` 或 `background.scripts`),无需额外包裹函数,顶层代码直接执行。
2. 内容脚本注入 API 变更:
原 `chrome.tabs.executeScript` 在 V3 中被废弃,需改用 `
chrome.scripting.executeScript`,并通过 `target.tabId` 指定标签页,`files` 字段传入脚本路径。
3. 错误处理增强:
新增 `.catch()` 捕获脚本注入失败的错误(如扩展权限不足、目标脚本文件不存在等),便于调试(原 V2 代码未处理此类错误)。
4. 语法简化:
箭头函数替代 `function` 表达式,简化代码结构(不影响逻辑,符合现代 JS 实践)。
配套 manifest.json 注意事项(若需完整适配 V3):
为确保上述 `background.js` 正常运行,需在 `manifest.json` 中声明以下权限和配置(V3 必须):
{
"manifest_version": 3,
"name": "Auto Clicker",
"version": "1.0",
"permissions": ["activeTab", "scripting", "tabs"], // 新增 scripting 权限
"background": {
"service_worker": "background.js" // 指定 Service Worker 文件
},
"content_scripts": [
// 若 contentqw.js/content.js 需要匹配特定站点,可在此声明(按需添加)
{
"matches": ["<all_urls>"], // 或具体站点,如 "https://*.example.com/*"
"js": ["contentqw.js"] // 若通过 manifest 注入,可无需在 background 中动态注入
}
]
}
- 核心权限:`scripting` 是 V3 中动态注入脚本的必须权限,`tabs` 用于监听标签页更新事件。
- 静态/动态注入选择:若脚本需在所有页面加载时注入,可直接在 `content_scripts` 中声明(更高效);若需动态控制(如仅在特定条件下注入),则保留 `background.js` 中的 `
chrome.scripting.executeScript` 逻辑。
以上修改完全遵循 V3 规范,逻辑与原代码一致,同时修复了原代码中可能存在的未处理错误问题。