为什么我得到Chrome本机消息“;找不到指定的本机消息传递主机&”;

Why am I getting Chrome Native Messaging "Specified native messaging host not found."?

本文关键字:本机 消息传递 主机 找不到 Chrome 消息 为什么      更新时间:2023-09-26

我已经做了一段时间了,我想不通。我已经阅读了Chrome Native Messaging文档,但我不断收到来自扩展的"找不到指定的Native Messaging主机"错误。

注册表指向的清单:

{
  "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);

请记住,我一连接Native()就收到错误。我在我的扩展清单中有"本机测试"权限。

注册表:

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.fordcar.chromekeys更改为其他任何名称,我仍然会得到相同的错误,所以要么是找不到注册表项,要么是我没有一个好的清单.json。

谢谢!

反斜杠是JSON中的转义字符。您必须在清单中使用两个反斜杠作为路径分隔符:

// BAD:
"path": "C:'Users'fordcars'Desktop'Development'ChromeKeys'Debug'ChromeKeys.exe",
// GOOD:
"path": "C:''Users''fordcars''Desktop''Development''ChromeKeys''Debug''ChromeKeys.exe",

我强烈建议您学习如何按照调试本机消息中所述进行调试,因为如果您这样做,您会看到一条更详细的错误消息:

找到了清单,但没有找到本机消息主机com.fordcars.chromekeys的二进制文件。清单中指定的主机路径:C:''UsersordcarsDesktopDevelopmentChromeKeysDebugChromeKeys.exe

即使不查看错误日志,如果您遵循错误消息的要点,也可能会注意到示例清单和您的清单之间的差异(即拼写错误的反斜杠)。