Подключите собственное приложение C++ к надстройке Firefox WebExtensions с собственным обменом сообщениями.

Я хочу сделать простой пример надстройки Firefox, используя собственный обмен сообщениями. Вот мой код:

Родное приложение:

void SendDataToExtension(string message)
{
    _setmode(_fileno(stdout), O_BINARY);
    try {
        unsigned int len = message.length();
        std::string message = "{\"text\": \"This is a response message\"}";
        unsigned int lenStr = str.length();
        std::cout << char(((lenStr >> 0) & 0xFF))
            << char(((lenStr >> 8) & 0xFF))
            << char(((lenStr >> 16) & 0xFF))
            << char(((lenStr >> 24) & 0xFF));
        std::cout << str.c_str();
        std::cout.flush();
    }
    catch (...) {
        throw;
    }
}

string OpenStandardStreamIn()
{
    std::cout.setf(std::ios_base::unitbuf);
    _setmode(_fileno(stdin), _O_BINARY);
    unsigned int c, t = 0;
    size_t pos = 0, m = 0;
    std::string inp;
    inp = "";
    t = 0;
    for (int i = 0; i <= 3; i++) {
        t += (unsigned int)pow(256.0f, i) * getchar();
    }
    for (int i = 0; i < (int)t; i++) {
        c = getchar();
        inp += c;
    }
    return inp;
}

int _tmain(int argc, _TCHAR* argv[])
{
    string input = "";
    while ((input = OpenStandardStreamIn()) != "")
    {
        try 
        {
            if (input.compare("ping")) {
                SendDataToExtension("pong");
            }
        }
        catch (...) { throw; }
    }
    return 0;
}

JS-код:

var port = browser.runtime.connectNative("ping_pong");

port.onMessage.addListener((response) => {
  console.log("Received: " + response);
});

browser.browserAction.onClicked.addListener(() => {
  console.log("Sending:  ping");
  port.postMessage("ping");
});

Когда я добавил дополнение в Firefox, я получил 2 ошибки:

stderr output from native app ping_pong:   File "ping_pong.exe", line 1

stderr output from native app ping_pong: SyntaxError: Non-ASCII character '\x90' in file ping_pong.exe on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

(Нет тега native-messaging. Итак, я использовал тег chrome-native-messaging, но я хочу, чтобы этот пример работал в Firefox)

EDIT1:

Эти 2 ошибки - моя ошибка. Я просто удаляю «python» в ping_pong_win.bat, чтобы решить их.

Но у меня возникла другая проблема. Когда я запускаю этот тест, это результат:

Sending:  ping
Received: [object Object]

Похоже родное приложение не работает.

EDIT2: при отладке родное приложение получило сообщение "ping", но не может отправить ответное сообщение "pong"

Решено: родное приложение отправило ответ в браузер, я просто неправильно печатаю: @@

port.onMessage.addListener((response) => {
  console.log("Received: " + response.text);
});

person Thế Hải Nguyễn    schedule 22.02.2017    source источник
comment
Я рад, что вы нашли решение своей проблемы. Однако фактический ответ/решение не следует редактировать в вопросе. Как правило, вам следует отредактировать вопрос, чтобы уточнить вопрос, но не включать ответ. внутри Вопроса. Вы должны создать свой собственный ответ с кодом, который вы использовали для решения вашей проблемы, а затем принять его (системе может потребоваться 48-часовая задержка, прежде чем принять ваш собственный ответ). Если вы решили проблему самостоятельно, рекомендуется ответить на свой вопрос.   -  person Makyen♦    schedule 27.07.2017