我正在尝试为Google Chrome创建一个扩展程序,我想在其中处理一些图像。
该扩展程序以前是使用NPAPI创建的,但是逐步淘汰需要切换到另一种替代方案,Native Messaging看起来最适合这项工作。
本机主机是用C ++编写的,它从stdin读取从扩展发送的格式化消息(有些像{action:“name_of_action”,缓冲区:“x0x0”,长度:“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编码),解码它们并在app中处理该缓冲区。我也尝试过(在Windows上)使用UrlDownloadToFile函数从C ++下载该图像,但这似乎失败了,在上一条消息中结束与本机消息传递主机通信时出错。是否有人知道为什么chrome不允许从消息传递主机可执行文件下载文件?
答案 0 :(得分:1)
如果您只想在本机代码中进行图像处理,那么您可能不需要使用Native Messaging。您最有可能使用NaCl或PNaCl,它可以生成操作系统中立的可执行文件,可以使用Chrome安全地运行。
要与您的NaCl模块进行通信,您也可以使用PostMessage和扩展程序的JavaScript代码进行通信。您甚至可以直接发送字典对象,并使用字典界面以本机代码对其进行分解。
只有当您需要访问PPAPI未公开的操作系统功能,或者需要加载/运行预编译代码(例如加载Windows DLL)时,才需要本机消息。