如何将二进制流(从.jpg文件读取,大约1M)从firefox插件传递到页面托管javascript?

如何将二进制流(从.jpg文件读取,大约1M)从firefox插件传递到页面托管javascript?,javascript,npapi,browser-plugin,Javascript,Npapi,Browser Plugin,我最近在做一个项目,需要将二进制流从npapi插件传递到javascript,我尝试了以下方法: 使用NPN_InvokeDefault,我创建了一个字符串变量来存储二进制流,并将其调用到javascript,但失败了。(我试着传递从XXX.txt文件读取的二进制流,它可以工作!) 我尝试使用NPN_NewStream,workes中列出的示例,但pic加载到新的浏览器选项卡中,我不知道如何在javascript中接收它 以前有没有人遇到过类似的问题?或者npapi不能支持这种数据传输 期待您的

我最近在做一个项目,需要将二进制流从npapi插件传递到javascript,我尝试了以下方法:

  • 使用NPN_InvokeDefault,我创建了一个字符串变量来存储二进制流,并将其调用到javascript,但失败了。(我试着传递从XXX.txt文件读取的二进制流,它可以工作!)

  • 我尝试使用NPN_NewStream,workes中列出的示例,但pic加载到新的浏览器选项卡中,我不知道如何在javascript中接收它

  • 以前有没有人遇到过类似的问题?或者npapi不能支持这种数据传输


    期待您的建议,非常感谢。

    不幸的是,NPAPI的设计从来没有考虑过这个目的。有几种方法可以做到这一点,但没有一种是真正理想的:

    • 您可以创建一个javascript数组,并以1-4字节的小数据块传递数据(这真的非常低效)
    • 您可以在插件中创建一个嵌入的Web服务器,并从插件中请求数据(我已经这样做了,它可以很好地工作,但是请记住,如果您从SSL网站使用它,当嵌入的Web服务器不是SSL时,您会收到安全警告)
    • 您可以对二进制数据进行base64编码并将其作为字符串发送
    这就是我所看到的。不能将实际的二进制数据直接作为字符串发送的原因是NPAPI要求字符串数据为UTF8,但如果您对其进行base64编码,则可以正常工作


    很抱歉,我不能给你一个“更快乐”的解决方案:-/

    谢谢你,taxilian,你的建议真的很有帮助!事实上,我尝试了你的第三个解决方案,Base64工作得很好——我现在可以将图片传递到js页面。还有一个问题:我可以通过100K的图片,但是当我尝试1M的图片时,firefox的插件容器变得很忙(25%的cpu),最后崩溃了。。。我想知道在这种数据传递中是否有大小限制?可能有;我从来没有做过这么大的绳子。此外,欢迎使用stackoverflow=]记住始终向上投票有益的答案或评论,如果答案是最佳答案,则将其标记为“正确”。当然,如果你愿意,你可以等着看是否会有更好的答案。@brianchai:这不完全是一个预期的用例,但如果是可复制的,请:)