2

状況: フラッシュ ソケットのセキュリティ ポリシー ファイルの制限を回避するために、フラッシュ ソケット通信 (バイト範囲) を JavaScript に置き換えようとしています。

詳細: javascript からのバイナリ データがあり、base64 エンコード/デコードによってフラッシュに渡すことができますが、これは遅すぎます。ディスクに保存してローカル URL を渡すことはオプションではありません (速度のためだけでなく、クライアントはメモリ内のすべてのものを優先し、swf ファイルはローカル ファイルの読み込みを制限される場合があります)。さらに、Flash の ExternalInterface は XML (バイナリ データを運ぶように設計されていない) を使用してデータを AS3 に渡すため、base64 を使用しないと機能しません。

質問: bae64 エンコーディングではなく、ディスクに書き込むことなく、JS から AS3 にバイナリ データを取得する方法はありますか?

Action Message Format (AMF) については知っていますが、多くの外部依存関係に道を追加しているようで、それでも遅いのでしょうか?

注: 私のプログラムは、可能な限りブラウザと互換性がある必要があり、クライアントによってダウンロードされ (小さい必要があります)、可能な限り高速に実行する必要もあります...

ありがとう!

4

1 に答える 1

1

私はこの問題について少し考えを変えました:

最初にバイナリ データをテキスト ベースの形式にマーシャリング (つまり、base64 エンコード) せずに、Flash と Javascript の間でバイナリ データを送信する簡単な方法はありません。

OPで指摘されているように、ActionscriptとJavascriptの間の通信を容易にするために、ExternalInterface クラスは実際にオブジェクト/データをXML形式にマーシャリングします。そのため、バイナリ データはこの XML への変換を行う必要があります。

新しい考え: ExternalInterfaceFlash アプリケーションを使用すると、実際に DOM が変更され、XML との間でデータをシリアル化/逆シリアル化するメソッドが追加されます (参照が必要です。これについて読んだことがありますが、今は見つかりません)。技術的には、Javascript でこれらのメソッドを再定義し、バイナリ データを渡そうとしたときに発生した XML 解析エラーを修正できる可能性があります。これらのメソッドの名前の名前を決定する必要があります (または同様のもので始まることを思い出します__Flash__)。

于 2012-08-04T18:34:45.043 に答える