Chrome扩展原生消息主机找不到问题排查求助
1. 原生消息主机Manifest路径转义错误
JSON字符串中的反斜杠需要双转义,你当前的路径"C:\Users\[My Name]\Downloads\Checkmate Extension\native_host\Model.py"会被JSON解析器识别为转义字符,导致实际路径无效。
修正示例:
"path": "C:\\Users\\[My Name]\\Downloads\\Checkmate Extension\\native_host\\run_model.bat" // 或者使用正斜杠避免转义问题 "path": "C:/Users/[My Name]/Downloads/Checkmate Extension/native_host/run_model.bat"
2. 直接指向Python脚本的执行问题
Windows系统无法直接将.py文件作为可执行程序启动,Chrome无法直接调用该脚本。需创建一个批处理文件(.bat)来调用Python解释器执行脚本:
创建run_model.bat文件,内容如下:
@echo off python "%~dp0Model.py"
如果Python未加入系统环境变量,需指定Python完整路径,例如:"C:\Python310\python.exe" "%~dp0Model.py"
之后修改原生消息主机Manifest的path字段指向该批处理文件(注意路径转义)。
3. 注册表项路径验证
确认注册表中HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\test的默认值是原生消息主机Manifest的完整路径,且路径同样需要双转义:
"C:\\Users\\[My Name]\\Downloads\\Checkmate Extension\\native_host\\manifest.json"
注意:注册表路径必须与manifest实际存放位置完全一致
4. 路径空格与权限问题
若路径包含空格(如Checkmate Extension),需确保注册表、manifest及批处理文件中的路径都正确保留空格;同时检查脚本所在文件夹的读写权限,确保Chrome能正常访问。
5. background.js连接方式冲突
你的代码同时使用了chrome.runtime.connectNative(持久连接)和chrome.runtime.sendNativeMessage(单次请求),两种方式不能同时针对同一主机使用,会引发连接异常。建议保留其中一种,例如单次请求写法:
var message = { type: "email_message", message: "This is an example message." }; chrome.runtime.sendNativeMessage('test', message, function(response) { if (chrome.runtime.lastError) { console.log('Error:', chrome.runtime.lastError.message); } else { console.log('Received response from native host:', response); } });
内容的提问来源于stack exchange,提问作者Chibuike S. Eze

