Chrome扩展Service Worker注册失败(状态码15)求助
解决Chrome扩展Manifest V3中Service Worker注册失败(错误码15)的问题
核心原因
错误码15表示Chrome无法将你的Service Worker识别为ES模块——Manifest V3默认不会将Service Worker当作模块处理,仅靠.mjs后缀不足以触发模块加载模式。
解决方案步骤
1. 修改Manifest配置,声明模块类型
在manifest.json的background字段中添加"type": "module",这是让Chrome将脚本当作ES模块加载的必要配置:
{ // ... 其他原有配置 "background": { "service_worker": "background.mjs", "type": "module" }, // ... 其他原有配置 }
2. 修复Firebase模块导入问题
Chrome扩展的Service Worker无法直接访问node_modules目录,你需要调整Firebase的导入方式:
- 方案A:使用Firebase CDN直接导入
修改background.mjs中的导入语句,替换为官方CDN链接(可根据需求更换版本号):import { initializeApp } from 'https://www.gstatic.com/firebasejs/9.23.0/firebase-app.js'; import { getFirestore } from 'https://www.gstatic.com/firebasejs/9.23.0/firebase-firestore.js'; chrome.runtime.onInstalled.addListener(() => { // 替换为你的实际Firebase项目配置 const firebaseConfig = { apiKey: "YOUR_API_KEY", authDomain: "YOUR_AUTH_DOMAIN", projectId: "YOUR_PROJECT_ID", storageBucket: "YOUR_STORAGE_BUCKET", messagingSenderId: "YOUR_SENDER_ID", appId: "YOUR_APP_ID" }; const app = initializeApp(firebaseConfig); const db = getFirestore(app); }); - 方案B:打包Firebase模块到扩展资源
使用Webpack、Rollup等打包工具,将Firebase依赖与你的background.mjs打包为单个ES模块文件,确保打包后的文件路径与Manifest中声明的一致。
3. 验证配置有效性
- 务必将
firebaseConfig中的占位符替换为你项目的真实配置,否则Firebase初始化会失败。 - 重新加载扩展:在Chrome扩展管理页面开启开发者模式,点击「重新加载」按钮,查看是否仍有注册错误。
额外排查点
如果问题仍存在,可通过Chrome扩展开发者工具(扩展管理页面→「检查视图」→「检查background页面」)查看控制台的详细错误日志,进一步定位路径、权限或依赖问题。
内容的提问来源于stack exchange,提问作者Christian Sugarol
相关产品推荐
相关产品推荐

