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

开发Chrome扩展遇Uncaught (in promise) Error连接错误,求解决

解决Chrome扩展消息通信错误的方案

错误原因分析

你遇到的Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.错误,主要有三个常见诱因:

  1. 后台脚本发送消息时,目标标签页的内容脚本还未完成注入
  2. 内容脚本的消息监听器未正确处理响应逻辑
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:36:23