ネイティブ メッセージング ホストがデータを Chrome に送り返すには、まず 4 バイトの長さ情報を送信し、次に JSON 形式のメッセージを文字列/文字配列として送信する必要があります。
以下は、C と C++ の 2 つの例で、同じことをわずかに異なる方法で行います。
C の例:
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]) {
// Define our message
char message[] = "{\"text\": \"This is a response message\"}";
// Collect the length of the message
unsigned int len = strlen(message);
// We need to send the 4 bytes of length information
printf("%c%c%c%c", (char) (len & 0xff),
(char) ((len>>8) & 0xFF),
(char) ((len>>16) & 0xFF),
(char) ((len>>24) & 0xFF));
// Now we can output our message
printf("%s", message);
return 0;
}
C++ の例:
#include <string.h>
int main(int argc, char* argv[]) {
// Define our message
std::string message = "{\"text\": \"This is a response message\"}";
// Collect the length of the message
unsigned int len = message.length();
// We need to send the 4 bytes of length information
std::cout << char(((len>>0) & 0xFF))
<< char(((len>>8) & 0xFF))
<< char(((len>>16) & 0xFF))
<< char(((len>>24) & 0xFF));
// Now we can output our message
std::cout << message;
return 0;
}
(実際のメッセージは、長さ情報と同時に送信できます。わかりやすくするために分割されています。)
OP Chromeの例に従って、メッセージを出力する方法は次のとおりです。
port.onMessage.addListener(function(msg) {
console.log("Received" + msg.text);
});
実際には、ネイティブ メッセージング アプリから返されるキーとして「テキスト」を使用する必要はありません。それは何でもかまいません。ネイティブ メッセージング アプリからリスナーに渡される JSON 文字列は、JavaScript オブジェクトに変換されます。
上記の手法を jsoncpp (C++ JSON ライブラリ) と組み合わせて使用し、アプリに送信された要求を解析するネイティブ メッセージング アプリの C++ の例については、https ://github.com/kylehuff/libwebpg/blob/ を参照してください。 22d4843f41670d4fd7c4cc7ea3cf833edf8f1baf/webpg.cc#L4501