在C ++程序中从Chrome扩展程序接收消息

时间:2016-07-04 15:00:51

标签: c++ google-chrome-extension chrome-native-messaging

我有一个Chrome扩展程序,它使用NativeHostMessaging通过指向此文件的json文件启动可执行C ++文件。

此.exe文件尝试读取从扩展程序发送的邮件。首先,它读取描述长度的4个字节,然后读取等于length的字节数。这个文件的第一件事就是等待来自扩展的消息。

但是,可执行文件没有从扩展程序接收任何内容并继续等待。 STDIN(0)上没有任何内容。

这是安全问题还是我做错了什么?我是否以错误的顺序读/写序列?

2 个答案:

答案 0 :(得分:1)

以下是我对windows的看法:

#include "stdafx.h"
#include "json\json.h"

int _tmain(int argc, _TCHAR* argv[])
{

    //save in a file so we know it was called
    FILE *fh_debug; int errorcode;
    errorcode =fopen_s(&fh_debug, "debug.txt","ab+");
    std::string msg = "Host Called";
    fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);

    unsigned int uiSize = 0;
    std::string inputStr;

    //read the first four bytes (=> Length)
    for (int i = 0; i < 4; i++)
    {
        int read_char = getchar();
        uiSize += read_char * (int) pow(2.0, i * 8);
    }

    //for debug "0000" = 808464432
    if ( uiSize == 808464432 ) {
        uiSize = 0; inputStr = "{\"text\":\"tester\"}"; 
    }

    //debug record size
    msg = std::to_string(uiSize);
    fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);

    //read the text
    for (unsigned int i = 0; i < uiSize; i++)
    {
        inputStr += getchar();
    }

    //debug record json message
    msg = inputStr;
    fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);

    //get the text
    std::string theText;
    Json::Value jsonRoot;
    Json::Reader jsonReader;
    bool OK = jsonReader.parse(inputStr, jsonRoot);

    try {
        theText = jsonRoot.get("text", "no text element").asString();
    }
    catch (std::exception& e)
    {
        std::cout << e.what() << '\n';
        throw e;
    }

    //debug record json message
    msg = theText;
    fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);

    std::string strOut = "{\"text\":\"Hello " + theText + "\"}";
    uiSize = strOut.length();

    msg = strOut;
    fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);

    std::cout << char(((uiSize>>0) & 0xFF));
    std::cout << char(((uiSize>>8) & 0xFF));
    std::cout << char(((uiSize>>16) & 0xFF));
    std::cout << char(((uiSize>>24) & 0xFF));
    std::cout << strOut.c_str();

    return 0;
}

答案 1 :(得分:0)

此代码在OSx上适用于我

Input.GetMouseButton (0)