我一直在研究这个问题,我无法弄明白这一点。我已经阅读了Chrome Native Messaging docs,但我一直收到“未找到指定的本机消息传递主机”。来自扩展程序的错误。
注册表指出的清单:
{
"name": "com.fordcars.chromekeys",
"description": "ChromeKeys description",
"path": "C:\Users\fordcars\Desktop\Development\ChromeKeys\Debug\ChromeKeys.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extension://pdkakljppghagmaoijbpicogfdbodpbc"
]
}
扩展脚本:
// Event page
var nativeName = "com.fordcars.chromekeys";
var nativePort = chrome.runtime.connectNative(nativeName);
function nativeDataReceived(data)
{
// Not used
}
function nativeDisconnected()
{
console.log("Native program disconnected. Error: " + chrome.runtime.lastError.message);
}
nativePort.onMessage.addListener(nativeDataReceived);
nativePort.onDisconnect.addListener(nativeDisconnected);
请记住,一旦connectNative(),我就会收到错误。我的扩展程序清单中有“nativeMessaging”权限。
注册表:
Subkey: HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.fordcars.chromekeys
Value name: (Default)
Value: C:\Users\fordcars\Desktop\Development\ChromeKeys\Debug\nativeManifest.json
调试: 我做了一些调试,发现如果我将我的connectNative nativeName从 com.fordcars.chromekeys 改为其他任何东西,我仍然得到同样的错误,所以它要么找不到注册表项或/和我没有好的manifest.json 。
谢谢!
答案 0 :(得分:1)
反斜杠是JSON中的转义字符。您必须在清单中使用两个反斜杠作为路径分隔符:
// BAD:
"path": "C:\Users\fordcars\Desktop\Development\ChromeKeys\Debug\ChromeKeys.exe",
// GOOD:
"path": "C:\\Users\\fordcars\\Desktop\\Development\\ChromeKeys\\Debug\\ChromeKeys.exe",
我强烈建议您按照Debugging native messaging中的说明学习如何进行调试,因为如果您这样做,那么您会看到更详细的错误消息:
找到清单,但不是本机消息传递主机com.fordcars.chromekeys的二进制文件。清单中指定的主机路径:C:UsersordcarsDesktopDevelopmentChromeKeysDebugChromeKeys.exe
即使没有查看错误日志,如果您按照错误消息中的项目符号点进行操作,您可能已经注意到sample manifest和您之间的差异(即拼写错误的反斜杠)。