开发Chrome扩展遇Uncaught (in promise) Error连接错误,求解决
解决Chrome扩展消息通信错误的方案
错误原因分析
你遇到的Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.错误,主要有三个常见诱因:
- 后台脚本发送消息时,目标标签页的内容脚本还未完成注入
- 内容脚本的消息监听器未正确处理响应逻辑
manifest.json中内容脚本的匹配规则配置错误
具体修复步骤
1. 修正后台脚本的消息发送时机
chrome.tabs.onUpdated会在标签页状态变化时多次触发(比如从loading到complete),如果在页面加载中就发送消息,内容脚本还没加载完成,就会出现接收端不存在的错误。修改后台脚本,只在页面加载完成后发送:
chrome.tabs.onUpdated.addListener((tabId, tab) => { // 新增判断:确保页面加载完成,且URL符合条件 if (tab.status === "complete" && tab.url && tab.url.includes("linkedin.com/in")) { chrome.tabs.sendMessage(tabId, {type: "MAIN", profile: "test"}) // 捕获sendMessage的Promise异常,避免控制台报错 .catch(err => console.log("消息发送失败:", err)); } });
2. 修复内容脚本的响应逻辑
chrome.runtime.onMessage的监听器中,必须调用sendResponse()函数来完成响应(如果需要响应的话),而不是直接给变量赋值。如果后台脚本期望响应,不调用该函数会导致Promise一直处于pending状态,也可能引发错误:
(() => { chrome.runtime.onMessage.addListener((obj, sender, sendResponse) => { // 正确调用sendResponse发送响应 sendResponse({line1 : "hello"}); // 如果是异步操作,需要返回true告知Chrome等待响应 // return true; }); })();
3. 检查manifest.json的内容脚本配置
确保manifest.json中正确配置了内容脚本的匹配规则,示例配置如下:
{ "manifest_version": 3, "name": "你的扩展名称", "version": "1.0", "background": { "service_worker": "background.js" }, "content_scripts": [ { "matches": ["*://*.linkedin.com/in/*"], "js": ["ContentScript.js"] } ], "permissions": ["tabs"] }
注意:如果使用Manifest V2,background字段的写法是"scripts": ["background.js"],同时确认matches规则完全覆盖你要注入的LinkedIn页面URL。
额外验证步骤
- 重新加载扩展:在Chrome扩展管理页面(
chrome://extensions/)点击"重新加载"按钮 - 打开LinkedIn个人页面,查看控制台是否还有错误
- 可以在内容脚本开头添加
console.log("内容脚本已注入"),确认脚本是否成功加载到目标页面
内容的提问来源于stack exchange,提问作者bears
相关产品推荐
相关产品推荐

