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

如何将现有代码从Manifest 2迁移至Manifest 3?

Manifest V2 到 V3 完整迁移指南(针对你的现有配置)

先给你修正后的manifest.json,再一步步拆解迁移要点:

{
  "manifest_version": 3,
  "name": "Algebra-Geometry",
  "description": "Learn Algebra and Geometry!",
  "version": "1.0",
  "action": {
      "default_icon": "icon.png",
      "default_popup": "popup.html"
  },
  "permissions": ["tabs"],
  "host_permissions": ["<all_urls>"],
  "content_scripts": [
      {
          "matches": ["<all_urls>"],
          "js": ["main.js"]
      }
  ]
}

核心迁移修正点

  • 替换browser_action为action:V3把原有的browser_action和page_action合并成统一的action字段,功能完全一致,只是命名做了规范。
  • 拆分权限配置:V3将主机访问权限(比如<all_urls>)从permissions中剥离,单独放到host_permissions数组里,permissions只保留tabs这类功能权限。
  • 移除content_scripts里的popup.js:popup.js是弹窗页面的专属脚本,应该在popup.html里通过<script src="popup.js"></script>引用,不需要放到内容脚本列表里——内容脚本是注入到目标网页的脚本,和弹窗脚本属于完全独立的运行环境。

其他需要检查的代码迁移点

如果你的扩展还有其他代码,还要注意这些细节:

  • 背景脚本迁移为Service Worker:如果之前有background字段(比如"background": {"scripts": ["background.js"]}),V3要改成"background": {"service_worker": "background.js"}。Service Worker有诸多限制:不能直接操作DOM、不能用window对象、生命周期是事件驱动的,需要把原有的后台逻辑改成事件监听模式(比如chrome.runtime.onInstalled.addListener)。
  • 内容脚本的API调用:V3里内容脚本和扩展上下文的通信逻辑不变,但要确保chrome.tabs这类API的权限配置正确。
  • 弹窗页面的CSP限制:V3默认的内容安全策略(CSP)禁止内联脚本和eval,如果你的popup.html里有内联脚本(比如<script>alert('test')</script>),要么把脚本移到外部文件,要么在manifest里配置content_security_policy字段放宽限制(优先推荐用外部脚本)。
  • 动态权限申请:如果扩展需要动态申请权限,V3里chrome.permissions.request的逻辑不变,但要确保manifest里的optional_permissions配置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:36:18