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

bri*_*hai 3 javascript npapi browser-plugin

我最近正在研究一个项目,该项目需要将npapi插件的二进制流传递给javascript,我尝试了以下方法:

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

  2. 我尝试使用NPN_NewStream,http://www.terraluna.org/dgp/cvsweb/PluginSDK/Documentation/pi3.htm#npnnewstream中列出的示例有效 ,但该图片已加载到新的浏览器选项卡中,我没有知道如何用JavaScript接收它。

以前有没有人遇到过类似的问题?还是npapi无法支持这种数据传输?

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

tax*_*ian 5

不幸的是,NPAPI的设计从未考虑到这一目的。您可以通过几种方法来实现,但都不是理想的方法:

  • 您可以创建一个javascript数组,并以1-4个字节的小块形式传递数据(这确实非常低效)
  • 您可以在插件中创建一个嵌入的Web服务器并从那里请求数据(我已经做到了,它可以很好地工作,但是请记住,如果您从SSL网站使用此服务器,则在嵌入式Web服务器收到安全警告不是SSL)
  • 您可以对二进制数据进行base64编码,然后将其作为字符串发送。

这些就是我所看到的方式。您无法直接将实际的二进制数据作为字符串发送的原因是NPAPI要求字符串数据为UTF8,但是如果您对base64进行编码,则可以正常工作。

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