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

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

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

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);
});

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]