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

Chrome扩展Native Messaging:Python主机向扩展发消息失败求助

问题分析与解决

核心问题:stdout被重定向导致浏览器无法接收主机消息

你的run.sh脚本把Python进程的标准输出(stdout)重定向到了hello文件,而Chrome Native Messaging依赖主机通过stdout发送消息给浏览器,这直接导致浏览器收不到任何来自主机的消息,自然触发不了port.onMessage回调。

修复步骤

1. 修改run.sh,移除stdout重定向

将脚本改为仅保留stderr重定向用于错误排查,stdout必须留给Native Messaging与浏览器通信:

#!/bin/sh
python3 main.py 2>> err_file

2. 确保Native Messaging配置与扩展连接名一致

你的background.js中使用chrome.runtime.connectNative("com.google.chrome.uniphore")连接主机,但配置文件com.google.chrome.echo.json的name字段是com.google.chrome.echo,两者不匹配会导致连接失败。需将配置文件的name改为com.google.chrome.uniphore,或修改background里的连接参数为com.google.chrome.echo,确保两者完全一致。

3. 修复主机代码的异常输出问题

getMessage和sendMessage里的print("Error", x)会输出到stdout,破坏Native Messaging的消息格式(要求为「4字节长度前缀+JSON内容」的结构),应将错误输出到stderr:

# 替换原print语句
sys.stderr.write(f"Error: {x}\n")

4. 验证消息格式(可选)

你的encodeMessage代码生成的格式符合Chrome要求:4字节本机字节序无符号整数作为长度前缀,后跟UTF-8编码的JSON字符串,这部分无需修改。修复上述问题后,可测试扩展发"ping"时,主机是否能返回正确格式的"pong"。

测试验证

  1. 重启Chrome并重新加载扩展
  2. 打开扩展后台页面控制台(chrome://extensions/ → 目标扩展 → 「背景页」)
  3. 触发通信后,查看控制台是否输出Receivedpong

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:52:16