Chrome扩展从Manifest V2迁移至Manifest V3相关问题咨询
Manifest V3 迁移修改步骤
1. Manifest.json 配置修改
你需要对原有配置做以下调整:
- 将
manifest_version字段值从2修改为3 - MV3已废弃
browser_action字段,将该字段名替换为action,字段内部的default_icon、default_popup、default_title配置无需改动 - 新增
permissions字段,声明复制功能需要的clipboardWrite权限 - (可选)如果你的扩展后续需要请求外部接口,需要新增
host_permissions字段声明对应的域名权限
修改后的完整Manifest示例:
{ "action": { "default_icon": "img/icon_active.png", "default_popup": "html/popup.html", "default_title": "Title here" }, "description": "description here", "icons": { "128": "img/icon_128.png", "16": "img/icon_16.png" }, "manifest_version": 3, "name": "Title here", "version": "1.0.1", "permissions": ["clipboardWrite"] }
2. popup.js 代码修改
原有代码使用的document.execCommand("copy")已经被标准废弃,随时可能在后续Chrome版本中被移除,建议替换为官方推荐的异步Clipboard API,逻辑更简洁稳定性也更高。
修改后的代码示例(保留原有jQuery事件绑定逻辑):
$(document).on("click", ".copy-me", async function(ev) { const rel = $(this).attr("rel"); const text = $("#"+rel).text(); try { await navigator.clipboard.writeText(text); // 此处可以自行添加复制成功的提示逻辑 } catch (err) { // 此处可以自行添加复制失败的提示逻辑 console.error('复制失败:', err); } });
迁移注意事项
- 确认所有在Manifest中声明的本地资源(图标、popup.html等)路径和实际项目路径完全一致,MV3对资源路径的校验更严格
- 如果你的扩展后续需要新增后台逻辑,不能再使用MV2的
background_page或者持久化background脚本,需要改用MV3的service_worker,且service_worker不能访问DOM,相关DOM操作要移到popup或者内容脚本中 - popup页面的执行上下文会在popup弹窗关闭后立即销毁,不要在popup中执行需要长时间运行的任务
内容的提问来源于stack exchange,提问作者Imran Murtaza
相关产品推荐
相关产品推荐

