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

M2 Mac上Chrome原生消息无法连接Node.js,Intel Mac正常

Chrome原生消息通信M2 Mac适配问题解决方案

问题定位

你的Chrome扩展在Intel Mac正常,但M2 Mac上无法启动原生消息宿主,核心原因大概率是ARM架构下的路径、权限或Node.js环境差异。


修复步骤

1. 修正宿主路径与Node.js shebang

  • M2 Mac的Homebrew默认安装在/opt/homebrew,Node.js路径通常是/opt/homebrew/bin/node,而非Intel的/usr/local/bin/node。执行which node确认真实路径,然后修改index.js开头的shebang:
    #!/opt/homebrew/bin/node
    
  • 宿主JSON文件(如com.my_company.my_application.json)需放在M2对应的用户级路径:/Users/<user>/Library/Application Support/Google/Chrome/NativeMessagingHosts/,注意路径不要加转义符\。

2. 配置宿主JSON并验证权限

确保JSON配置格式正确,重点检查:

{
  "name": "com.my_company.my_application",
  "description": "Native messaging host",
  "path": "/Users/<user>/你的项目路径/index.js",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://<你的扩展ID>/"
  ]
}
  • 给index.js添加执行权限:chmod +x /Users/<user>/你的项目路径/index.js
  • 验证宿主文件可执行:直接运行/Users/<user>/你的项目路径/index.js,输入{"text":"test"}后看是否返回"pong"

3. 调试Chrome日志

继续用你之前的命令启动Chrome:

/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --enable-logging --v=1

查看~/Library/Application Support/Google/Chrome/chrome_debug.log:

  • 若出现errno=13:说明权限不足,检查宿主文件/目录的读写执行权限
  • 若出现errno=2:说明路径错误,核对JSON里的path字段是否为绝对路径且正确

Chrome原生消息通信标准流程

  1. 原生宿主端:
    • 必须通过stdin/stdout与Chrome通信,遵循「4字节长度前缀+JSON内容」的协议(你用的chrome-native-messaging库已封装此逻辑)
    • 可执行文件需具备执行权限,配置文件放在Chrome指定的系统/用户路径下
  2. 扩展端:
    • 长连接用chrome.runtime.connectNative,适合双向持续通信
    • 单次消息用chrome.runtime.sendNativeMessage,适合一次性请求
    • 必须在manifest.json中声明"permissions": ["nativeMessaging"],并在宿主JSON中添加扩展ID到allowed_origins

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:01:11