Chrome原生邮件 - 为什么我收到“未找到指定的本机邮件主机”错误?

时间:2014-12-31 22:15:38

标签: javascript google-chrome google-chrome-extension chrome-native-messaging

根据Chrome Native Messaging文档,成功调用connectNative()会返回一个端口,您可以使用该端口将消息发布到本机应用程序(Mac应用程序)。在我的例子中,nativeConnect()确实在我的情况下返回一个有效的端口,但几乎立即触发了对onDisconnected()监听器的调用。每当侦听器被触发时,它都会打印" lastError"属性到浏览器的控制台,这给出了:

Specified native messaging host not found.

为什么这样做?产生msg的监听器如下所示:

function onDisconnected() {
  console.log("Inside onDisconnected(): " + chrome.runtime.lastError.message);
  port = null;
}

在文档底部(Native Messaging)有关于此特定错误的整个部分,并且建议的补救措施表明清单文件的命名,放置或定义(JSON)不正确,或者主机应用程序没有命名或位于清单所说的位置。该文档说connectNative()将在一个单独的进程中启动主机"但是Activity Monitor没有提供启动本机主机应用程序的证据。

我按如下方式调用connectNative():

chrome.runtime.onMessageExternal.addListener(

  function(request, sender, sendResponse) {
    //var imgdata = JSON.stringify(request.imgdata);
    //process it somehow here

    port = chrome.runtime.connectNative("com.allinlearning.nmhforbrowserextension");

    if (port)
    {
       console.log("connectNative() returned a non-null port");

       port.onMessage.addListener(onNativeMessage);
       port.onDisconnect.addListener(onDisconnected);
    }
});

我的本​​机主机清单文件位于正确的文件夹中,根据文档,解析为JSON,如下所示:

{
  "name": "com.allinlearning.nmhforbrowserextension",
  "description": "Manifest for native messaging host for Google browser extension",
  "path": "/Users/mycomputer1/Documents/nmhost.app",
  "type": "stdio",
  "allowed_origins": ["chrome-extension://gldheanjpgopipommeingjlnoiamdfol/"]
}

Chrome扩展程序也需要清单,在我获得权限部分之前,我无法从connectNative()返回非空端口,因此我非常确定现在这是正确的:

"permissions": [
               "nativeMessaging",
                "tabs",
                "activeTab",
                "background",
                "http://*/", "https://*/"
                ]

更新:

了解如何从Mac终端启动Chrome浏览器,并使用标记查看更多"详细信息"日志记录。然后,当我运行时,我注意到了这个输出:

[21285:38915:1231/164417:ERROR:native_process_launcher.cc(131)] Can't find manifest for native messaging host com.allinlearning.nmhforbrowserextension

很明显它无法找到主机清单,但为什么??

2 个答案:

答案 0 :(得分:1)

对于Google Chrome,清单文件的系统级目录为:

~/Library/Application Support/Google/Chrome/NativeMessagingHosts/

特定于用户的安装路径位于:

~/Library/Application Support/Chromium/NativeMessagingHosts/

(Mac的当前documented路径不正确(patch)。install.sh中的路径(来自文档中的the example)是正确的。)

答案 1 :(得分:0)

只想提一下,如果您使用的是不同的 Chrome 发布渠道,例如 Canary,这在开发过程中很常见,您将不得不相应地调整路径。

~/Library/Application Support/Google/Chrome Canary/NativeMessagingHosts/