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

Firefox扩展开发问题:移植Chrome扩展时无法获取Cookie

问题分析与解决方法

核心错误原因

  1. Manifest V3 背景脚本类型不兼容:Firefox 对 Manifest V3 的背景脚本仅支持 service_worker 类型,你当前使用的 scripts 是 Manifest V2 的写法,这会导致背景脚本无法在正确的上下文运行,进而无法调用 cookies.getAll() 获取到 Cookie。
  2. 异步操作未正确处理:browser.cookies.remove() 是异步方法,你当前直接调用未等待完成,可能导致删除操作失效或顺序混乱。

修正后的配置与代码

1. 更新 manifest.json

将背景脚本配置改为 service_worker,并精简不必要的权限:

{
  "manifest_version": 3,
  "name": "My Addon",
  "version": "1.0",
  "description": "Description of my addon",
  "permissions": ["cookies", "tabs", "webNavigation"],
  "host_permissions": ["<all_urls>"],
  "background": {
    "service_worker": "background.js"
  },
  "icons": {
    "48": "icons/icon48.png",
    "128": "icons/icon128.png"
  },
  "action": {
    "default_icon": {
      "48": "icons/icon48.png",
      "128": "icons/icon96.png"
    }
  }
}

2. 优化 background.js

修正异步逻辑,直接针对目标域名获取并删除 Cookie,提升效率与可靠性:

browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
  if (changeInfo.status === "complete" && tab.url) {
    const targetDomains = ["nzz.ch", "faz.net"];
    // 遍历目标域名,仅处理当前页面匹配的域名
    for (const domain of targetDomains) {
      if (tab.url.includes(domain)) {
        console.log(`${domain} 页面加载完成,开始清理Cookie`);
        // 仅获取当前域名相关的Cookie,避免权限范围过大的问题
        const cookies = await browser.cookies.getAll({ domain });
        console.log(`找到 ${cookies.length} 个需要删除的Cookie`);
        // 异步删除每个Cookie,确保操作完成
        for (const cookie of cookies) {
          try {
            const deleteUrl = `${cookie.secure ? 'https' : 'http'}://${cookie.domain}${cookie.path}`;
            await browser.cookies.remove({ url: deleteUrl, name: cookie.name });
            console.log(`已删除Cookie: ${cookie.name}`);
          } catch (error) {
            console.error(`删除Cookie失败 ${cookie.name}:`, error);
          }
        }
      }
    }
  }
});

额外注意事项

  • Firefox 版本要求:确保使用 Firefox 109 及以上版本,旧版本对 Manifest V3 的支持存在缺陷。
  • Cookie 作用域匹配:getAll({ domain: "nzz.ch" }) 会自动匹配所有子域名(如 .nzz.ch)的 Cookie,无需额外配置。
  • 调试方法:在 Firefox 中通过 about:debugging#/runtime/this-firefox 打开扩展的后台脚本控制台,查看日志和错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:34:53