c++ - 通讯时 Chrome native 消息错误

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

我正在尝试为 Google Chrome 创建一个扩展,我想在其中处理一些图像。 该扩展程序以前是使用 NPAPI 创建的,但正在逐步淘汰,需要切换到另一个替代方案,Native Messaging 看起来最适合这项工作。
native 主机是用 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 编码)发送图像缓冲区,对其进行解码并在应用程序中处理该缓冲区。我也尝试(在 Windows 上)使用 UrlDownloadToFile 函数从 C++ 下载该图像,但这似乎失败了,结束于上一条消息与 native 消息传递主机通信时出错。有人知道为什么 chrome 不允许从消息传递主机可执行文件下载文件吗?

最佳答案

如果您只想在 native 代码中进行图像处理,那么您可能不需要使用 native 消息传递。您很可能会使用 NaCl 或 PNaCl,它会生成操作系统中立的可执行文件,这些可执行文件可以在 Chrome 中安全运行。

要与您的 NaCl 模块通信,您也可以通过扩展程序的 JavaScript 代码使用 PostMessage。您甚至可以直接发送字典对象并使用字典接口(interface)在 native 代码中分解它们。

只有当您需要访问 PPAPI 未公开的操作系统功能时,或者当您需要加载/运行预编译代码(例如加载 Windows DLL)时,才需要使用 native 消息。

关于c++ - 通讯时 Chrome native 消息错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21551966/

相关文章:

c++ - 三元运算符是否以定义的方式短路

google-chrome-extension - 为 "googleapis.com/auth/userinfo"启用 Google API

javascript - 无法通过 chrome 扩展上的 javascript 访问 eBay 网站上的元素

c++ - pp::Core::GetTimeTicks() 在系统 sleep 时与 pp::InputEvent::GetTimeStamp() 不同步

c++ - Qt 5 和 LibVLC

c++ - 如何让文本显示在 Qt 的 TextBrowser 中?

javascript - 如何使用 Chrome 扩展程序从页面中剪切元素

google-nativeclient - NaCl sel_ldr 行为和系统调用

google-chrome - 使用 Native Client (NaCl) 是否可以在可以接受传入请求的页面中嵌入服务器?

c++ - 位检查验证