0

ファイル swf と HTML ボタンを含む Web ページがあります。ボタンをクリックすると、swf ファイルが表示している現在の画像を保存 (ディスクにダウンロード) します (一種の画像ギャラリーです)。

ボタンがswf内にある場合は完全に機能しますが、ExternalInterfaceを介してJavaScriptから画像を保存するメソッドを呼び出すと失敗します。

FileReference.save()JS-AS 通信を確認しました (問題ありません) 。ユーザー イベントによってトリガーされた場合にのみ機能することがわかっています。おそらく、HTML ボタンのクリックはユーザー イベントとは見なされません

何かを変更する以外に (サーバー側でコードを移動する、サーバーに画像を送信する、ダウンロードするなど)、ユーザー イベントをシミュレートする方法はありますか? 他の解決策やヒントをいただければ幸いです。

注意: Flash ボタンを使用しますが、HTML が必要です。

4

1 に答える 1

0

解決策(または場合によってはそうではない)

フラッシュベース

現在のところ、最善の策は、Flash内からボタンを操作し続けることです。メインのFlashランタイムからボタンを移動する必要がある場合は、Flashの2つの埋め込みを使用して実行していることを試し、を使用してそれらの間で通信することができますLocalConnection。ただし、これをうまく機能させるのは面倒なので、これはお勧めしませんLocalConnection。また、2つのインスタンスで機能するセキュリティサンドボックスの問題に遭遇しないという保証はありません。

サーバーサイドベース

画像データをサーバーに送り返し、フロントエンドが要求できる実際のURLを作成する保存システムを実装できます。これにより、ダウンロードに必要なものを指定できます。これの欠点は、サーバーが必要なことです(したがって、オフラインアプリでは機能しません)。また、後でプルダウンするためだけに画像データを一方向に送信するという非常に多くの手間が必要です...

私はここでこれについてより詳細に行きました:

キャンバス画像から画像ファイルへ

HTML5ベース

現在、コメントで提案したように、データURLのダウンロードはまだ完全なソリューションではないため、お勧めしません。ただし、プラス面としては、上位のブラウザーが何を実装しているかに注意を払っています。その答えはまもなく変更される可能性があるためです。

仕組み

基本的に、データURIを介して画像のダウンロードを実装しようとしました(これが問題の最善の解決策であると考えています)。これはすべて正常に機能し、さらに、BitmapDataオブジェクトから必要なBase64データを非常にうまく導出できます。ただし、問題は、ダウンロードと一緒にファイル名を指定する方法がないことです。そのため、正しい拡張子さえ持たないかなり醜いファイル名になってしまいます。

<a href="data:image/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC">Click to Download File</a>

少し調べてみると、これに対する実行可能な回避策はないようですが、次のような実装の準備ができている仕様があります。

<a download="filename.png" href="data:image/octet-stream;...">Download File</a>

ダウンロード属性は、上記の問題に正確に対応するように設計されており、ダウンロードに名前を付けることができます。残念ながら、それを実装しているブラウザはまだ見つかりません...

参考文献

于 2012-08-29T13:46:44.013 に答える