Chrome 的本机消息发送/接收二进制数据

Bel*_*iyo 5 google-chrome-extension chrome-native-messaging

我正在开发一个 Chrome 扩展程序,它通过 Chrome 消息协议与外部可执行文件进行通信。外部应用程序要么接受媒体文件的绝对路径,要么从stdout.

由于只有扩展端可以访问实际文件(通过拖放操作)并且无法将绝对路径发送到外部应用程序,因此我想我会读取二进制输入文件并将FileReader二进制文件发送到可执行文件。尽管似乎没有一种好方法可以将二进制字符串(或类型化数组)发送到外部可执行文件或从外部可执行文件接收二进制字符串(或类型化数组)。

我希望有一种方法可以只发送类型化数组所在位置的指针。

知道如何通过本机消息传递协议从外部可执行文件发送和接收大型二进制字符串。

https://developer.chrome.com/extensions/nativeMessaging

Aly*_*hak 0

您说,“似乎没有一种好方法可以将二进制字符串(或类型化数组)发送到外部可执行文件或从外部可执行文件接收二进制字符串(或类型化数组)。” 是的,有一个好方法,至少在c++中是这样。我们使用以下命令从可执行文件发送到扩展程序:

WriteFile(hStdOut, (LPVOID)&bufMsg[0], dwNumBytesToWrite, &dwNumBytesWritten, NULL);
Run Code Online (Sandbox Code Playgroud)

hStdOut 是 stdout 的句柄,我们通过这种调用在外部可执行文件(本机主机应用程序)中获得它:

hStdOut = (HANDLE) _get_osfhandle(nStdOutDescriptor);
Run Code Online (Sandbox Code Playgroud)

我们首先获取一个端口,从扩展发送到本机主机应用程序(可执行文件),如下所示:

var port = chrome.runtime.connect(myExtensionId);
Run Code Online (Sandbox Code Playgroud)

然后在端口上调用 postMessage() ,如下所示:

port.postMessage({ message:"my-image-data-msg", myImgdata: data});
Run Code Online (Sandbox Code Playgroud)

通过调用 postMessage(),您的消息和图像数据将发送到可执行文件,该可执行文件通过监视标准输入来读取它们。