2012-05-14 7 views
2

私はJavaScriptにNPAPIプラグインのバイナリストリームを渡す必要がある、最近のプロジェクトの作業だけど、私は次の方法を試してみた:Firefoxのプラグインからページホスティングのjavascriptにバイナリストリーム(.jpgファイルから読み込み、約1M)を渡すにはどうしたらいいですか?

  1. はNPN_InvokeDefaultを使用し、私は店の文字列のバリアントを作成しましたバイナリストリームを作成し、それをjavascriptに呼び出すと失敗しました。

  2. http://www.terraluna.org/dgp/cvsweb/PluginSDK/Documentation/pi3.htm#npnnewstreamの例に掲載されているNPN_NewStreamを使用しようとしましたが、新しいブラウザタブに画像がロードされていましたが、私はjavascriptでそれを受け取る方法を知らない。

以前に似たような問題が発生したことはありますか?またはnpapiがそのような種類のデータ転送をサポートしていない可能性がありますか?

あなたの提案をお待ちしております、ありがとうございます。

答えて

4

残念ながら、NPAPIはこの目的を念頭に設計されていませんでした。そこあなたがそれを行うことができますいくつかの方法があり、それらのどれも本当に理想的ではない:

  • あなたはjavascript配列を作成し、小さな1-4バイトのチャンクでデータを渡すことができます(これは本当に非常に非効率的である)
  • プラグインに埋め込まれたWebサーバーを作成し、そこからデータを要求することができます(私はこれを行っていますが、かなりうまくいくかもしれませんが、SSL Webサイトからこれを使用すると、埋め込みWebサーバーはSSLではありません)
  • バイナリデータをBase64エンコードして文字列として送信できます。

これは私がそれを行ったのを見た方法です。実際のバイナリデータを文字列として直接送ることができない理由は、NPAPIでは文字列データがUTF8である必要がありますが、base64でエンコードするとうまくいきます。

申し訳ありません "幸せ"な解決策はありません: -/

+0

タクシーをありがとう、あなたの提案は本当に役立ちます!実際に私はあなたの3番目のソリューションを試して、Base64はうまく動作します - 今私はjsページに写真を渡すことができます。そして別の問題があります:私は100Kピクチャを渡すことができますが、1Mピクチャを試すと、firefoxのプラグインコンテナが忙しくなり(25%CPU)、最終的にクラッシュしました...データの種類は? – brianchai

+0

あります。私は大きな文字列をやったことはありません。また、歓迎するstackoverflow =]彼らが最高の答えである場合、常にupvote有益な答えやコメントとフラグを "正しい"と答えてください。あなたが望むなら、より良い答えが出てくるのを待つことができます。 – taxilian

+0

@brianchai:まったく予想されるユースケースではありませんが、再現可能であれば、[バグを報告してください](https://bugzilla.mozilla.org/):) –

関連する問題