如何将消息从Chrome扩展发送到本机应用程序

How to send message FROM Chrome extension TO Native app?

本文关键字:本机 应用程序 扩展 Chrome 消息      更新时间:2023-10-16

我有一个用c++编写的本地应用程序。

我可以使用"如何将消息从本机应用程序发送到chrome扩展?"?

但我无法找到另一种方法。

Chrome文档。states:Chrome在一个单独的进程中启动每个本机消息主机,并使用标准输入(stdin)和标准输出(stdout)与之通信。相同的格式用于向两个方向发送消息:每条消息都使用JSON进行序列化,UTF-8编码,并以32位消息长度(按本机字节顺序)开头

如何从chrome扩展发送的stdin读取/解释数据?

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

请帮忙!

谢谢!

正如有人在评论中提到的,如果长度大于255,所提供的解决方案将不起作用。例如,如果实际长度为296(二进制0000000 1 00101000),则前面提出的解决方案将产生41=>0000000 1+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()在执行与当前长度值的位OR之前返回转换为无符号int的int(int有一个为sign保留的位,无符号int没有)。

现在,我不确定这里可能出现的潜在的大/小endian问题,因为我还没有在不同的体系结构上测试过这个解决方案。我希望有更多经验的人可以对此发表评论。

从stdin:读取json数据

int _tmain(int argc, _TCHAR* argv[])
{
unsigned int length = 0;
//read the first four bytes (=> Length)
for (int i = 0; i < 4; i++)
{
    length += getchar();
}
//read the json-message
string msg = "";
for (int i = 0; i < length; i++)
{
    msg += getchar();
}
}