c++ - 如何从 Chrome 扩展程序向 native 应用程序发送消息?

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

我有一个用 C++ 编写的 native 应用程序。

我可以使用 How to send message FROM native app TO Chrome extension? 将数据从我的 native 应用程序发送到 Chrome 扩展程序

但我无法找出其他方法。

Chrome 文档。状态:Chrome 在单独的进程中启动每个 native 消息传递主机,并使用标准输入 (stdin) 和标准输出 (stdout) 与其进行通信。双向发送消息使用相同的格式:每条消息均使用 JSON、UTF-8 编码进行序列化,并以 native 字节顺序显示 32 位消息长度。

如何从标准输入读取/解释由 chrome 扩展发送的数据?

如何读取 4 字节长度信息以及以 UTF-8 编码发送的其余数据?

请帮忙!

谢谢!

最佳答案

正如有人在评论中提到的,如果长度大于 255,所提供的解决方案将不起作用。例如,如果实际长度为 296(二进制 00000001 00101000),前面提出的解决方案将产生 41 => 00000001 + 00101000 = 1 + 40 = 41。

必须考虑读取的字节数。在本例中,计算长度的正确方法是 1*(2^8) + 40 = 296。因此正确的解决方案可能是:

unsigned int length = 0;

//read the first four bytes
for (int i = 0; i < 4; i++) {
  int read_char = getchar();
  length += read_char * (int) pow(2.0, i * 8);
}

下面介绍了基于位移位和位运算的更好解决方案(可能有点难以理解,但肯定更简洁):

unsigned int length = 0;

for (int i = 0; i < 4; i++) {
  unsigned int read_char = getchar();
  length = length | (read_char << i * 8);
}

值得注意的是,getchar() 返回的 int 在与当前长度值执行位 OR 之前会转换为 unsigned int(int 保留了一位用于符号,unsigned int 则没有)。

现在,我不确定此处可能出现的潜在大/小端问题,因为我尚未在不同的体系结构上测试此解决方案。希望有经验的人可以评论一下。

关于c++ - 如何从 Chrome 扩展程序向 native 应用程序发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20211166/

相关文章:

javascript - innerHTML 是异步的吗?

javascript - 扩展 Chrome,javascript 在页面中写入

c++ - 用于 chrome 扩展 native 客户端的 c++ 中的嵌入式 http 服务器

javascript - 调用事件后等待事件监听器完成

c++ - 基于节点的类的子位置?

c++ - 与许多输入小部件接口(interface)的设计方法

python - 链接 boost::python::numpy 时出现问题

javascript - HTML 在插入网页时显示为纯文本

javascript - 如何开发Chrome扩展来定期检查网站?

c++ - ARM 程序集 - 访问参数与返回值?