10

私はドキュメントを読みましたが、まだ理解できません。C で記述されたデスクトップ アプリケーションと Chrome 拡張機能があります。Chrome 拡張機能でこのメッセージを受け取る方法を知っています。

port.onMessage.addListener(function(msg) {
    console.log("Received" + msg);
});

Chrome 拡張機能にメッセージを送信するには、C アプリケーションに何を記述すればよいですか? Python/NodeJS の例も適切です。

4

3 に答える 3

13

ネイティブ メッセージング ホストがデータを 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

于 2013-11-08T18:45:16.720 に答える
8

ここで見ることができます。これは、拡張機能にメッセージを送受信する Python スクリプトの例です: http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/ api/nativeMessaging/host/native-messaging-example-host?revision=227442

私が理解している限り、メッセージを送信するには、次のことを行う必要があります。

  1. メッセージの長さをバイナリとしてコンソールに書き込みます
  2. \0 文字を 3 つ書く
  3. メッセージを平文で書く

これは私のために仕事をしたC#コードです:

String str = "{\"text\": \"testmessage\"}";

Stream stdout = Console.OpenStandardOutput();

stdout.WriteByte((byte)str.Length);
stdout.WriteByte((byte)'\0');
stdout.WriteByte((byte)'\0');
stdout.WriteByte((byte)'\0');
Console.Write(str);

そして、上記のリンクからのpythonコード:

sys.stdout.write(struct.pack('I', len(message)))
sys.stdout.write(message)
sys.stdout.flush()

興味深いことに、3 つの \0 文字は明示的に出力されませんが、struct.pack の出力後に表示されるようです。理由はわかりません...

また、メッセージを JSON 形式で送信する必要があることにも注意してください。そうしないと、機能しないようです。

于 2013-10-11T01:18:42.923 に答える