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

Manifest V3 Chrome扩展:如何检测无Chrome窗口打开状态

解决Manifest V3 Chrome扩展检测无窗口问题

问题根源

Manifest V3的后台采用Service Worker机制,闲置时会被Chrome自动终止,原代码里的setInterval无法持续运行。当最后一个Chrome窗口关闭时,Service Worker大概率已经停止,根本没法执行后续的检测逻辑,自然触发不了无窗口的通知。

修复方案

放弃轮询,改用事件驱动的方式监听窗口状态变化,同时适配Service Worker的生命周期:

1. 确保manifest.json权限齐全

先把必要权限加上:

{
  "manifest_version": 3,
  "name": "你的扩展名称",
  "version": "1.0",
  "background": {
    "service_worker": "background.js"
  },
  "permissions": ["notifications", "windows"]
}

2. 重写background.js代码

// 核心检测函数:仅当无窗口时发送通知
function checkAndSendNotification() {
  chrome.windows.getAll({ populate: false }, (windows) => {
    if (windows.length === 0) {
      chrome.notifications.create({
        type: 'basic',
        iconUrl: chrome.runtime.getURL('icons/logo.png'),
        title: '无Chrome窗口',
        message: '当前没有打开的Chrome窗口。'
      });
    }
    // 有窗口时不发通知,符合需求
  });
}

// 监听窗口关闭事件,触发检测
chrome.windows.onRemoved.addListener(() => {
  checkAndSendNotification();
});

// 扩展启动时先做一次检测(可选)
checkAndSendNotification();

补充优化

如果需要在Chrome启动时也触发检测,可以加个启动监听:

chrome.runtime.onStartup.addListener(() => {
  checkAndSendNotification();
});

内容的提问来源于stack exchange,提问作者Russell Hertel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:34:55