解决 Chrome 下载 `.crx` 文件被自动删除及“无法安装扩展程序,因为它使用了不受支持的清单版本”问题

一、问题背景

在开发、测试或使用某些离线 Chrome 扩展时,用户常遇到两类典型问题:

  1. 下载 .crx 文件后几秒内被系统或浏览器自动删除
  2. 尝试通过"加载已解压的扩展程序"安装时,提示: "无法安装扩展程序,因为它使用了不受支持的清单版本。无法加载清单。"

二、问题一:.crx 文件下载后被自动删除

原因分析

  • 自 Chrome 33 起,Google 禁止直接安装非 Web Store 来源的 .crx 文件。
  • Windows Defender 或其他杀毒软件可能将 .crx 识别为潜在风险文件并自动隔离。
  • Chrome 的"安全浏览"功能会主动清理可疑下载项。

✅ 推荐解决方案:改后缀 + 解压加载(通用且安全)

  1. 开启下载确认提示

    进入 Chrome 设置 → 隐私和安全 → 下载内容 ,勾选 "下载前询问每个文件的保存位置"

  2. 手动重命名后缀

    下载 .crx 时,在保存对话框中将文件名从 xxx.crx 改为 xxx.zip,再点击"保存"。

  3. 解压并加载扩展

    • 解压 .zip 文件到任意文件夹;
    • 访问 chrome://extensions/
    • 开启右上角 【开发者模式】
    • 点击 【加载已解压的扩展程序】,选择解压目录。

💡 此方法绕过了 Chrome 对 .crx 的签名验证和来源限制,适用于所有现代 Chrome 版本。


三、问题二:"无法安装扩展程序,因为它使用了不受支持的清单版本"

核心原因

  • 扩展的 manifest.json 中声明了 "manifest_version": 2(即 Manifest V2);
  • 自 Chrome 112 起,Google 逐步弃用 MV2;
  • 自 Chrome 138(预计 2025 年中发布)起,MV2 扩展完全不可加载,无论通过何种方式。

📌 当前时间:2025年11月11日。主流 Chrome 稳定版已普遍 ≥ 138,MV2 已正式终结


四、针对 Manifest V2 兼容性的完整解决方案(按 Chrome 版本分类)

✅ 方案 A:使用 Chrome 实验性 Flag(仅限 Chrome 112 -- 137)

这是最简单的临时方案,适合仍在使用旧版 Chrome 的用户。

操作步骤:
  1. 在地址栏输入:

    复制代码
    chrome://flags/#allow-legacy-mv2-extensions
  2. 找到 "Allow legacy extension manifest versions" 选项;

  3. 将其设置为 Enabled

  4. 重启浏览器

  5. 再次尝试加载 MV2 扩展。

⚠️ 注意事项:

  • 此 flag 仅在 Chrome 112 至 137 版本中存在
  • Chrome 138+ 已彻底移除该 flag,访问链接将显示"未找到";
  • 即使启用,部分企业策略或安全组策略仍可能覆盖此设置。

✅ 方案 B:通过企业策略启用 MV2(Windows,仅限 ≤ Chrome 137)

适用于 IT 管理员或需批量部署的场景。

注册表配置(Windows):
  1. 打开注册表编辑器(regedit);

  2. 导航至:

    复制代码
    HKEY_LOCAL_MACHINE\SOFTWARE\Policies
  3. 依次创建项:GoogleChrome

  4. Chrome 下新建 DWORD (32-bit) 值 ,命名为:

    复制代码
    ExtensionManifestV2Availability
  5. 设置值为:

    • 1:允许用户控制(推荐);
    • 2:强制启用(管理员策略);
  6. 重启 Chrome,访问 chrome://policy/ 验证策略生效。

🔒 此方法在 Chrome 138+ 同样失效,Google 已硬编码禁用 MV2。


✅ 方案 C:升级扩展至 Manifest V3(长期唯一可靠方案)

若你拥有扩展源码或可修改权限,强烈建议迁移到 Manifest V3。

基本迁移步骤:
  1. 编辑 manifest.json

    json 复制代码
    {
      "manifest_version": 3,
      "name": "My Extension",
      "version": "1.0",
      "background": {
        "service_worker": "background.js"
      },
      "permissions": ["storage", "activeTab"]
    }
  2. 将原 background.scripts 替换为 service_worker

  3. 移除 web_accessible_resources 中的通配符写法;

  4. 使用 chrome.action 替代 chrome.browserAction

  5. 测试功能完整性。

📘 官方迁移指南:Migrate to Manifest V3


✅ 方案 D:改用 Firefox 浏览器(终极替代方案)

  • Firefox 仍全面支持 Manifest V2 ,且允许加载本地 .xpi 或解压扩展;
  • 对于 Dark Reader、SwitchyOmega、Tampermonkey 等经典插件,Firefox 版本通常维护良好;
  • 若工作流严重依赖 MV2 插件,可考虑将 Firefox 作为主力开发/测试浏览器。

五、总结与建议

场景 推荐方案
Chrome < 138,临时使用 MV2 插件 启用 chrome://flags/#allow-legacy-mv2-extensions
Chrome < 138,企业环境/批量部署 配置注册表策略 ExtensionManifestV2Availability
Chrome ≥ 138(当前主流版本) 必须升级到 Manifest V3改用 Firefox
避免 .crx 被删 下载时改 .crx.zip,解压后加载

❗重要提醒:

Google 已明确表示 Manifest V2 将不再回归。任何依赖 MV2 的业务系统、自动化工具或内部插件,都应尽快启动迁移计划。


六、附录:如何查看 Chrome 版本?

  1. 地址栏输入:chrome://version
  2. 查看第一行 "Google Chrome" 后的版本号(如 138.0.7200.100

若版本 ≥ 138,请直接采用 方案 C 或 D


参考文献

相关推荐
孟祥_成都2 小时前
最好的组件库教程又回来了,升级为 headless 组件库!
前端·面试·架构
Man2 小时前
当我们执行 npm run xxx 的时候实际执行逻辑和流程
前端·javascript·前端框架
曾富贵2 小时前
【eslint】快速配置
前端
阿珊和她的猫3 小时前
Webpack Loader 和 Plugin 实现原理详解
前端·webpack·node.js
做怪小疯子3 小时前
JavaScript 中Array 整理
开发语言·前端·javascript
香香爱编程3 小时前
Electron里的electron-window-state 使用
前端·javascript·vue.js·vscode·electron·前端框架
牧野星辰3 小时前
eslint你不懂的都在这里,不信你进来看嘛~
前端·eslint
FogLetter3 小时前
设计模式奇幻漂流:从单例孤岛到工厂流水线
前端·设计模式
ohyeah3 小时前
深入理解 JavaScript 数组:从创建到遍历的完整指南
前端·javascript