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

Firefox扩展调用browser.windows.get()无响应报can't access dead object如何解决

错误含义

can't access dead object 是Firefox平台的特有报错,代表你当前持有browser.windows对象引用对应的浏览器原生宿主对象已经被垃圾回收销毁,所以调用相关方法时既不会抛出同步错误,返回的Promise也永远不会进入resolved/rejected状态,导致await逻辑直接阻塞。

常见触发原因

  1. API调用的上下文已经被销毁:最常见的情况是你在popup页面、临时侧边栏这类关闭就会被销毁的非持久化上下文里,把browser.windows的调用放到了延迟回调(比如setTimeout、异步接口回调)中,回调执行前页面已经被关闭,上下文持有的所有浏览器API对象都会变成dead object。
  2. 调试时引用了旧上下文的对象:扩展重载后,之前在调试控制台保存的browser相关对象引用会失效,继续调用就会触发该报错。
  3. 低版本Firefox的API实现异常:你使用的Firefox 94属于较老版本,存在部分扩展API的已知实现问题。

修复方案

  • 优先把browser.windows相关逻辑放到扩展的后台脚本中执行,后台脚本属于持久化上下文,不会随popup等页面关闭被销毁。如果使用Manifest V3的后台Service Worker,注意不要在休眠触发后调用之前缓存的API对象引用。
  • 如果必须在popup等临时上下文调用API,确保调用逻辑在上下文活跃期间同步执行,不要放在延迟回调中执行,避免上下文提前销毁。
  • 调试时如果重载过扩展,需要重新打开调试控制台执行代码,不要复用之前保存的API对象引用。
  • 如果调用browser.windows.get时需要获取窗口内的标签页信息,需要在manifest.json的permissions字段中添加tabs权限,低版本Firefox可能因权限缺失导致API对象初始化异常。
  • 可以升级到最新的Firefox ESR版本测试,排除浏览器自身的API实现bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:04