3

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

ホストマニフェストが見つからないことは明らかですが、なぜですか??

4

2 に答える 2

2

Google Chrome の場合、マニフェスト ファイルのシステム全体のディレクトリは次のとおりです。

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

ユーザー固有のインストール パスは次のとおりです。

~/Library/Application Support/Chromium/NativeMessagingHosts/

(現在ドキュメントに記載されているMac のパスは正しくありません ( patch )。ただし、 install.sh内のパス(ドキュメントの例から) は正しいです)。

于 2015-01-03T10:15:10.503 に答える