21
ブラウザがファイルのダウンロードを受信したときに検出する
ユーザーが動的に生成されたファイルをダウンロードできるページがあります。生成に時間がかかるので、「待機中」のインジケーターを表示したいと思います。問題は、ブラウザーがファイルを受信したことを検出する方法がわからないため、インジケーターを非表示にできることです。 サーバーにPOSTする非表示のフォームでリクエストを作成し、その結果の非表示のiframeをターゲットにしています。これは、ブラウザウィンドウ全体を結果で置き換えないためです。ダウンロードが完了したときに発生することを期待して、iframeで「ロード」イベントをリッスンします。 「Content-Disposition:attachment」ヘッダーをファイルとともに返します。これにより、ブラウザーに「保存」ダイアログが表示されます。ただし、ブラウザはiframeで「ロード」イベントを発生させません。 私が試したアプローチの1つは、マルチパート応答を使用することです。そのため、空のHTMLファイルと添付のダウンロード可能なファイルが送信されます。例えば: Content-type: multipart/x-mixed-replace;boundary="abcde" --abcde Content-type: text/html --abcde Content-type: application/vnd.fdf Content-Disposition: attachment; filename=foo.fdf file-content --abcde これはFirefoxで機能します。空のHTMLファイルを受け取り、「load」イベントを発生させ、ダウンロード可能なファイルの「保存」ダイアログを表示します。しかし、IEとSafariでは失敗します。IEは「load」イベントを起動しますが、ファイルをダウンロードしません。Safariはファイルをダウンロードし(名前とコンテンツタイプが間違っています)、「load」イベントを起動しません。 別の方法として、ファイルの作成を開始する呼び出しを行い、準備ができるまでサーバーをポーリングし、作成済みのファイルをダウンロードするという方法もあります。しかし、サーバー上に一時ファイルを作成することは避けたいです。 誰かがより良いアイデアを持っていますか?
488
javascript
http
mime