You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关闭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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:09:59