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

如何从React应用向Chrome MV3扩展发送消息并解决runtime undefined报错

修复步骤

  1. 修正manifest.json配置
    首先替换externally_connectable内的占位符与规则:
  • 把ids数组里的extension_id替换为你的扩展真实ID,可在Chrome扩展管理页开启开发者模式后查看
  • matches规则末尾添加通配符,覆盖React应用所有路径:"matches": ["http://localhost:3001/*"]
  • 补充MV3必填的background配置,确保监听代码能加载:
"background": {
  "service_worker": "background.js"
},

修改完后一定要在扩展管理页刷新扩展,让配置生效。

  1. 调整React侧代码
    首先添加运行时判断,避免用户未安装扩展时直接报错,同时修正传参格式:
function test() {
  const extensionId = '替换为你的真实扩展ID';
  const session = "session";
  // 先判断chrome和runtime是否存在
  if (typeof chrome !== "undefined" && chrome?.runtime) {
    // 传对象而非纯字符串,匹配Background的判断逻辑
    chrome.runtime.sendMessage(extensionId, {session: session},
      function(response) {
        console.log(response);     
      });
  } else {
    console.log("未检测到扩展,请先安装");
  }
}

你之前加的/*global chrome*/只是消除了ESLint的未定义告警,不会在运行时注入chrome对象,只有用户安装了匹配规则的扩展时,Chrome才会在网页上下文注入chrome.runtime相关API。

  1. 测试注意事项
  • 访问React应用时必须用http://localhost:3001开头的地址,不能用127.0.0.1,避免和matches规则不匹配
  • 不要在隐身窗口测试,如需测试要手动开启扩展的隐身窗口权限
  • 每次修改扩展代码后都要刷新扩展,再刷新页面测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:30:02