Ошибка обмена сообщениями в Chrome при общении

Я пытаюсь создать расширение для Google Chrome, в котором я хочу обработать некоторые изображения.
Расширение ранее создавалось с использованием NPAPI, но после поэтапного отказа от перехода на другую альтернативу Native Messaging выглядел как наиболее подходящий для этой работы.
Собственный хост написан на C ++ и читает со стандартного ввода форматированное сообщение, отправленное из расширения (например, {action: «name_of_action», buffer: «x0x0», length: «4»}), анализирует его, извлекает буфер и выполняет некоторая обработка с изображением, после этого мне нужно вернуть сообщение на расширение.

Проблема, с которой я сталкиваюсь, заключается в том, что после нескольких сообщений (число не всегда одинаково) используемый порт отключается, и в консоли javascript появляется сообщение: Ошибка при связи с собственным хостом обмена сообщениями..

Мое приложение в основном делает это:

while(true)
{

/*read until I reach a delimiter*/
while(true){
c = getchar();
buffer[i] = c;
if(i>len && memcmp(buffer+i-len+1,delimiter,len)==0)
break;
i++;
}
ProcessMessage(buffer);
}

Я отправляю буферы изображений из расширения (в кодировке base64), декодирую их и обрабатываю этот буфер в приложении. Я также пытался (в окнах) использовать функцию UrlDownloadToFile, чтобы загрузить это изображение из C ++, но, похоже, это не получилось, в результате чего предыдущее сообщение Ошибка при общении с собственным хостом обмена сообщениями.Кто-нибудь знает, почему Chrome не позволяет загружать файл с исполняемого файла узла обмена сообщениями?

0

Решение

Если вы просто хотите выполнять обработку изображений в собственном коде, то вам, вероятно, не нужно использовать Native Messaging. Скорее всего, вы можете использовать NaCl или PNaCl, который создает нейтральные для ОС исполняемые файлы, которые можно безопасно запускать в Chrome.

Для связи с модулем NaCl вы также можете использовать PostMessage и из кода JavaScript вашего расширения. Вы даже можете напрямую отправить объект словаря и разложить его в нативный код, используя интерфейс словаря.

Собственное сообщение должно быть необходимо только тогда, когда вам нужен доступ к функциональности ОС, не предоставляемой PPAPI, или когда вам нужно загрузить / запустить предварительно скомпилированный код (например, загрузить Windows DLL).

1

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

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