根据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
很明显它无法找到主机清单,但为什么??
答案 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/