【问题标题】:Why am I getting Chrome Native Messaging "Specified native messaging host not found."?为什么我会收到 Chrome 原生消息“未找到指定的原生消息传递主机。”?
【发布时间】:2015-03-22 17:04:07
【问题描述】:

我已经研究了一段时间了,我想不通。我已阅读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

谢谢!

【问题讨论】:

  • 嗯,你真的应该再读一遍文档。

标签: javascript json windows google-chrome chrome-native-messaging


【解决方案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 和您的之间的区别(即拼写错误的反斜杠)。

【讨论】:

  • 是的,我只是从 JSON 验证器那里得到的,但肯定会检查 Chrome 日志的输出
  • 如果有人在尝试解决(基于 Chromium 的)Edge 问题时遇到此问题,请注意您不会收到详细的错误消息在控制台上使用--enable-logging。我设法猜到为什么没有“找到”我的主机(allowed_origins 缺少尾部斜杠),但那些调试说明没有帮助。
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多