关闭Chrome扩展Popup时如何清除已设置的Alarm?
实现关闭Popup时自动清除Chrome扩展Alarm
要实现关闭Popup窗口时自动清除Alarm,可以通过监听chrome.windows.onRemoved事件检测Popup窗口的关闭动作,触发时清除对应Alarm并清理存储的窗口ID。以下是修改后的代码:
chrome.action.onClicked.addListener((tab) => { chrome.windows.create({ url: chrome.runtime.getURL("/popups/popup.html"), type: "popup", width: 350, height: 480 }, async (win) => { await chrome.storage.local.set({'winId': win.id}); }); }); // 监听窗口关闭事件 chrome.windows.onRemoved.addListener(async (winId) => { const {winId: storedWinId} = await chrome.storage.local.get('winId'); // 确认关闭的是目标Popup窗口 if (winId === storedWinId) { // 清除所有已设置的Alarm(若需清除特定Alarm,可传入闹钟ID替换clearAll) await chrome.alarms.clearAll(); // 清理存储的窗口ID await chrome.storage.local.remove('winId'); } }); chrome.alarms.onAlarm.addListener(async function(alarm) { const {winId} = await chrome.storage.local.get('winId'); if (winId) { try { await chrome.windows.update(winId, {focused: true}); } catch (err) { // 若窗口已关闭,直接清除Alarm await chrome.alarms.clearAll(); await chrome.storage.local.remove('winId'); } } });
关键说明:
- chrome.windows.onRemoved:该事件会在任何窗口关闭时触发,通过对比关闭的窗口ID与存储的Popup窗口ID,确认是否是目标Popup。
- chrome.alarms.clearAll():清除所有已设置的Alarm,如果你的扩展设置了特定ID的Alarm,可改用
chrome.alarms.clear(alarmId)来精准清除。 - 额外增加了Alarm触发时的异常处理:若Popup窗口已被关闭,调用
chrome.windows.update会报错,此时直接清除Alarm并清理存储,避免无效操作。
内容的提问来源于stack exchange,提问作者user20763025
相关产品推荐
相关产品推荐

