Mac 用の Chrome ブラウザ拡張機能で「ネイティブ ホストが終了しました」というエラーを修正する方法を教えてください。ここにあるネイティブ メッセージングのドキュメントでは、このエラーが下部に具体的に言及され、考えられる原因が示唆されていますが、非常に一般的に述べられており (「これは、ネイティブ メッセージング ホストから開始された可能性が最も高い」)、解決するために何を試みるべきかは不明ですこれ。
ターミナルでのログ出力 (Mac ターミナルから Chrome を起動すると、ログ情報を表示できます) から、ネイティブ ホスト アプリ自体のプロセスが正常に開始されることはないと思いました。私は得続けます:
LaunchProcess: failed to execvp:
/Users/mycomputer1/Documents/myhost.app
ただし、バックグラウンド JavaScript ページのコンソールに「ネイティブ ホストが終了しました」と出力する実際のコードは次のとおりです。
function onDisconnected() {
console.log("Inside onDisconnected(): " + chrome.runtime.lastError.message);
port = null;
}
onDisconnected() リスナーは、ドキュメントに従ってここで実行した 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.ailhost");
if (port)
{
console.log("connectNative() returned a non-null port");
}
});
connectNative() が有効なポートを返すレベル bc で成功することを知っています。ただし、connectNative() は、ネイティブ ホスト アプリを見つけて起動しようとします。私のホストアプリはstdoutまたはstdinとの通信をまったく実装していませんが、ドキュメントは、ホストアプリが原因であり、何らかの形でChromeとネイティブアプリ間の「パイプ」の切断を開始していることを示唆しています。その上、Chrome のログ メッセージ (「LaunchProcess: failed to execvp:」) は、私の Mac アプリが正常に起動されなかったことを示しているようです。
他にもあります: オンラインで見つけたソース コード (おそらく古いものですか?ソース ファイル) は、この「ネイティブ ホストが終了しました」というメッセージがどこで発生したかを正確に明らかにし、調査により、Google Chrome のコードが終了している理由が示唆されます。HandleReadResult() では、Close() が呼び出され、まさに msg を提供し、Posix read() が 0 を返すことに応答して物事を閉じます。私のMacアプリでこれを読み取りに失敗させますか? 私の Mac アプリは stdout に何も書き込んでいません。それとも、これらすべてが私を誤解させており、execvp がホスト アプリを起動できなかったことが、より深い原因なのでしょうか? もしそうなら、なぜですか?これは単純な、必要最小限の Mac アプリです。