Chrome Native Messaging のドキュメントによると、connectNative() の呼び出しが成功するとポートが返され、それを使用してメッセージをネイティブ アプリ (Mac アプリ) に投稿できます。私の場合、nativeConnect() は有効なポートを返しますが、onDisconnected() リスナーへの呼び出しはほとんどすぐに開始されます。リスナーが起動されるたびに、「lastError」プロパティがブラウザのコンソールに出力され、次のようになります。
Specified native messaging host not found.
なぜこれを行うのですか?メッセージを生成するリスナーは次のようになります。
function onDisconnected() {
console.log("Inside onDisconnected(): " + chrome.runtime.lastError.message);
port = null;
}
この特定のエラーに関するセクション全体がドキュメントの下部にあり ( Native Messaging )、提案された救済策では、マニフェスト ファイルの名前、配置、または定義 (JSON) が間違っているか、ホスト アプリの名前が付けられていないか、配置されていないことが示されています。マニフェストがそうあるべきだと言っている場所。ドキュメントには、connectNative() は「別のプロセスでホストを開始する」と書かれていますが、アクティビティ モニターは、ネイティブ ホスト アプリが起動されたという証拠を示していません。
次のように 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() から null 以外のポートを取得できませんでした。したがって、これは正しいと確信しています。
"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
ホストマニフェストが見つからないことは明らかですが、なぜですか??