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

Chrome扩展Service Worker脚本报错:标签切换时消息发送失败

问题修复方案

1. 修正background.js的事件回调参数

chrome.tabs.onActivated的回调函数仅接收单个对象参数,包含tabId和windowId,并非拆分的两个参数。原代码错误拆分参数,导致传递给sendMessage的tabId值无效。

修正后的background.js:

chrome.tabs.onActivated.addListener((activeInfo) => {
  // 发送消息到激活的标签页
  chrome.tabs.sendMessage(activeInfo.tabId, {
    type: "NEW",
  }, (response) => {
    // 捕获发送失败的错误,避免控制台报错
    if (chrome.runtime.lastError) {
      console.log("消息发送失败:", chrome.runtime.lastError.message);
    }
  });
});

2. 匹配消息类型并修正content.js逻辑

background发送的消息类型是"NEW",但原content.js仅监听"initObserver"类型,导致消息无法被处理;同时initObserver仅为函数引用,未执行(缺少())。

修正后的content.js:

chrome.runtime.onMessage.addListener((obj, sender, response) => {
  const { type, value } = obj;

  if (type === "NEW") {
    // 替换为你实际要执行的逻辑,比如调用初始化函数
    initObserver();
  } else if (type === "initObserver") {
    initObserver();
  }
});

// 示例:定义初始化函数
function initObserver() {
  console.log("执行初始化逻辑");
}

3. 注意content script的注入限制

即使manifest设置了"<all_urls>",Chrome扩展的content script也无法注入到chrome://、chrome-extension://等特殊页面,切换到这类标签页时消息发送必然失败,因此background中添加错误捕获很有必要。

4. 权限与文件校验

当前manifest已声明tabs权限,无需额外调整,但需确保所有文件路径正确(如图标文件、popup.html存在)。

内容的提问来源于stack exchange,提问作者Namit Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:42:40