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

Firefox 106.0.1版本中扩展background script停止运行求助

Firefox 106.0.1中Manifest V2非持久化后台脚本停止运行的解决方案

针对未修改的Manifest V2扩展后台脚本在Firefox 106.0.1突然停止运行的问题,结合Firefox近期对Manifest V2的行为调整,给出以下排查和修复步骤:

核心原因推测

Firefox 106收紧了非持久化(persistent: false)后台脚本的回收机制,同时对chrome.alarms的触发逻辑做了细微调整,导致原本稳定的脚本因后台被提前回收、alarm未正确触发而停止工作。

具体修复步骤

1. 检查updateCache()函数的执行耗时

非持久化后台脚本的生命周期受任务耗时影响,如果updateCache()是同步长任务(比如大量同步网络请求、复杂计算),Firefox会直接终止脚本。

  • 将updateCache()改为异步执行,用async/await处理异步操作:
async function updateCache() {
  // 替换原同步逻辑为异步实现,例如用fetch替代同步XMLHttpRequest
  const response = await fetch('你的缓存数据源地址');
  const cacheData = await response.json();
  // 后续缓存写入逻辑
}

// 调用时同步异步逻辑
async function setUpdateAlarm() {
  await updateCache();
  chrome.alarms.create('Refresh', { periodInMinutes: 3 });
}

2. 临时启用持久化后台验证问题

修改manifest.json中的persistent为true,测试后台脚本是否恢复正常:

"background": {
    "scripts": [
        "background.js"
    ],
    "persistent": true
},

如果恢复正常,说明问题确实由非持久化后台的回收机制导致。注意:这只是临时验证方案,Firefox后续会逐步禁用Manifest V2的持久化后台。

3. 优化chrome.alarms的稳定性

Firefox 106对周期alarm的触发条件更严格,可在后台脚本被挂起时重新注册alarm,防止alarm丢失:

chrome.runtime.onSuspend.addListener(() => {
  chrome.alarms.create('Refresh', { periodInMinutes: 3 });
});

4. 检查Firefox隐私设置

  • 关闭“增强型跟踪保护”的严格模式,或将你的扩展加入例外列表;
  • 确认“设置 > 隐私与安全 > 清除历史记录”中未勾选“关闭Firefox时清除Cookie和站点数据”,该设置会导致alarm的存储数据被清除。

5. 迁移到Manifest V3

Firefox已开始逐步淘汰Manifest V2,后续版本会有更多限制。迁移到Manifest V3后,使用Service Worker替代后台脚本,生命周期管理更稳定:

  • 修改manifest.json为V3格式:
"background": {
    "service_worker": "background.js"
},
  • 调整后台脚本的API调用(Manifest V3中部分API有变化,chrome.alarms基本兼容,但需注意Service Worker的异步特性)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:01:15