mcpField
E
extension-migration

extension-migration

github.com/quangpl开发64164 次安装7 周前更新
代码仓库

关于 extension-migration

指导开发者将 Chrome 扩展从 Manifest V2 迁移到 Manifest V3 的技能。它通过审计、API 与配置调整、测试和商店提交步骤,以及迁移映射和清单组织迁移工作。

主要功能

  1. 01MV2 扩展审计流程
  2. 02后台页面迁移为 Service Worker
  3. 03弃用 API 替换对照
  4. 04Manifest、权限和 CSP 更新
  5. 05测试与提交清单

适用场景

  1. 01规划 MV2 到 MV3 的迁移
  2. 02替换已弃用的扩展 API
  3. 03检查权限和 Manifest 变更
  4. 04测试迁移结果并准备提交

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/quangpl/browser-extension-skills --skill extension-migration

安装后在 Claude Code 中输入/extension-migration确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
breaking-changes.md
migration-checklist.md
network-request-migration.md
service-worker-migration.md

详细介绍

扩展迁移(MV2 → MV3)

🚀 升级到 Premium 在 https://app.extensionbooster.net/dashboard/services/extension-ai-kit 获取 Premium 版本

官方迁移指南:https://developer.chrome.com/docs/extensions/develop/migrate

考虑采用框架:将 MV2 迁移到 MV3 时,可考虑采用 WXT 或 CRXJS,以获得内置的 MV3 支持、自动生成清单和现代化工具。

工作流概览

  1. 审核现有 MV2 扩展(API、权限、后台脚本)
  2. 将 manifest_version 更新为 3
  3. 将后台页面转换为服务工作线程
  4. 替换已弃用的 API(见下方快速参考)
  5. 更新权限、CSP 和 web_accessible_resources 格式
  6. 迁移 webRequest → declarativeNetRequest(如果使用了拦截功能)
  7. 将所有远程代码打包到本地
  8. 在各个 Chrome 版本中测试所有功能
  9. 提交到 Chrome 网上应用店

主要破坏性变更

区域MV2MV3
后台background.scripts/pagebackground.service_worker
浏览器操作browser_action / page_actionaction
网络拦截webRequest (blocking)declarativeNetRequest
脚本注入tabs.executeScript(string)scripting.executeScript({func/files})
远程代码允许使用 CDN 脚本必须在本地打包
CSP字符串值对象 {extension_pages: "..."}
Web 可访问资源string[]带有 matches 字段的 object[]
主机权限位于 permissions 数组中独立的 host_permissions 数组
URL 辅助方法chrome.extension.getURLchrome.runtime.getURL
持久化存储localStoragechrome.storage.local

迁移优先级检查清单

  • 已设置 manifest_version: 3
  • 已将后台转换为服务工作线程
  • localStorage/sessionStorage → chrome.storage.*
  • XMLHttpRequest → fetch
  • setInterval/setTimeout → chrome.alarms
  • browser_action/page_action → action
  • tabs.executeScript → scripting.executeScript
  • chrome.extension.getURL → chrome.runtime.getURL
  • permissions 中的主机条目 → host_permissions
  • web_accessible_resources 已更新为对象格式
  • content_security_policy 已更新为对象格式
  • 不含远程代码(CDN 脚本、eval、字符串形式的 Function())
  • webRequest 拦截 → declarativeNetRequest(如果使用了)

快速参考:MV2 → MV3 API 对照表

chrome.extension.getURL()        → chrome.runtime.getURL()
chrome.extension.getBackgroundPage() → chrome.runtime.getBackgroundPage() [deprecated, use messaging]
chrome.tabs.executeScript()      → chrome.scripting.executeScript()
chrome.tabs.insertCSS()          → chrome.scripting.insertCSS()
chrome.browserAction.*           → chrome.action.*
chrome.pageAction.*              → chrome.action.*
webRequest (blocking)            → declarativeNetRequest
localStorage                     → chrome.storage.local
XMLHttpRequest                   → fetch()
setInterval (background)         → chrome.alarms
document/window (background)     → NOT available in service worker

清单差异

// MV2
{
  "manifest_version": 2,
  "background": { "scripts": ["bg.js"], "persistent": false },
  "browser_action": { "default_icon": "icon.png" },
  "permissions": ["webRequest", "webRequestBlocking", "https://example.com/*"],
  "content_security_policy": "script-src 'self'; object-src 'self'",
  "web_accessible_resources": ["images/*.png"]
}

// MV3
{
  "manifest_version": 3,
  "background": { "service_worker": "bg.js" },
  "action": { "default_icon": "icon.png" },
  "permissions": ["declarativeNetRequest"],
  "host_permissions": ["https://example.com/*"],
  "content_security_policy": { "extension_pages": "script-src 'self'; object-src 'self'" },
  "web_accessible_resources": [{ "resources": ["images/*.png"], "matches": ["<all_urls>"] }]
}

参考文件

相关技能

  • extension-manifest - MV3 清单生成
  • extension-testing - 迁移后的测试
  • extension-security - 迁移后的安全审计

评论

支持 Markdown