【问题标题】:Google Packaged App Native Messaging谷歌打包应用原生消息
【发布时间】:2013-10-15 20:07:16
【问题描述】:

我有一个 Windows 控制台应用程序和一个 chrome 打包应用程序,我正在尝试通过两种方式进行通信。我已经按照他们使用 python 应用程序的示例进行操作,但我没有任何运气。

我已采取以下步骤:

  1. 在我的注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Google\NativeMessagingHosts 中创建了此条目: my.app.name : c:\path\to\my.app.name.json

  2. 我已经在那个位置创建了 json 文件: { "name": "my.app.name", "description": "Chrome 原生消息 API", "路径": "c:\path\to\my.app.name\consoleApp.exe", “类型”:“标准输入法”, “允许的来源”:[ “铬扩展://offmjeicniagcebcbclkdlkllfibllfh/” ] }

  3. 我在打包的应用脚本中添加了以下内容:

    function connect() {
     var hostName = "my.app.name";
     appendMessage("Connecting to native messaging host <b>" + hostName + "</b>")
     port = chrome.runtime.connectNative(hostName);
     port.onMessage.addListener(onNativeMessage);
     port.onDisconnect.addListener(onDisconnected);        
    }
    
    function appendMessage(text) {
     document.getElementById('messages').innerHTML += "<p>" + text + "</p>";
    }
    
    function onNativeMessage(message) {
      appendMessage("Received message: <b>" + message + "</b>");
    }
    
    function onDisconnected() {
     appendMessage("Failed to connect: " + chrome.runtime.lastError.message);
     port = null;
    }
    

当我单击一个调用连接函数的按钮时,我收到此错误:

“指定的本地消息传递主机名无效”

我已经尝试了所有我能想到的方法,但没有太多文档或示例代码(几乎没有)。有人有什么想法吗?

谢谢

【问题讨论】:

  • 来自user3174625的评论:你是如何在 C# 中接收消息的?

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


【解决方案1】:

刚刚成功!尝试将“路径”更改为“consoleApp.exe”(以及我之前的所有建议)并将您的应用程序放入与应用程序清单相同的文件夹中。然后检查任务管理器,您将看到您的流程有效。祝你好运。

【讨论】:

  • 这很有帮助,谢谢。我还发现,据我所知,关于主机命名约定的未记录要求。我的主机名为“myHostingApplication”。当我将其更改为“my.hosting.application”时,它开始起作用。 Google 可以对命名约定有任何他们喜欢的限制,但如果他们不记录这些限制,就会让生活变得悲惨。
  • 你说得对。我将我的更改为“com.google.chrome.myexample”,这是积极的变化之一。
  • 我最近回到这里进行进一步测试。主机名的另一个要求是它必须全部小写。
【解决方案2】:

起初,我认为您在“Google”和“NativeMessagingHosts”之间的注册表路径中错过了“Chrome”。据我了解, my.app.name 应该是键而不是值。 无论如何,它对我没有帮助:( 我还为 x64 和 x86 注册表项创建了相同的密钥。

【讨论】:

  • 我遇到了与此错误消息类似的问题。我查看了 Chromium 源,发现此错误仅在几个问题上触发:1)找不到应该指向清单文件的注册表值,2)无法打开清单文件,3)可以' t 解析清单文件,4) 清单中的名称不匹配,5) 可执行文件不是绝对的(但它在 Windows 上可能是相对的)。您可以使用 SysInternals ProcMon 之类的工具来了解 Chrome 是否从注册表加载设置、打开清单文件等。它对我有帮助;) -- 我在清单的 json 文件中有语法错误。
猜你喜欢
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 2018-04-29
  • 2012-09-10
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多