【问题标题】:Chrome's native messaging send/receive binary dataChrome 的本机消息发送/接收二进制数据
【发布时间】:2016-12-07 12:43:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: google-chrome-extension chrome-native-messaging


    【解决方案1】:

    除了使用自己的协议来拆分二进制数据并通过 JSON 编码的 base64 将它们从浏览器扩展传输到本机应用程序之外,没有其他方法,然后将二进制数据块收集在一起。请注意,JSON 字符串的总大小最多可为 4 GB(Chrome、Firefox)或 2 GB(MS Edge,因为它在内部使用 16 位字符),创建消息块时需要考虑这一点。

    【讨论】:

      【解决方案2】:

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

      WriteFile(hStdOut, (LPVOID)&bufMsg[0], dwNumBytesToWrite, &dwNumBytesWritten, NULL);
      

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

      hStdOut = (HANDLE) _get_osfhandle(nStdOutDescriptor);
      

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

      var port = chrome.runtime.connect(myExtensionId);
      

      然后像这样在端口上调用 postMessage():

      port.postMessage({ message:"my-image-data-msg", myImgdata: data});
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多