最初は理由がわかりませんでしたが、わかると納得できました。
ダウンロード警告が表示される
以前から、Ajaxでファイルのダウンロードをしようとしていることを書いています。
Ajaxでファイルのダウンロード - ソフトウェア開発者の日常
とりあずは動作するようになった機能 - ソフトウェア開発者の日常
動作確認はGoogle Chromeでしていましたが、Internet Explorerで動作することが必須なので、Internet Explorerで動作確認をすると、ファイルの生成が終わってダウンロードのダイアログが表示されるタイミングで、ダウンロードの警告が表示され、ダウンロードダイアログが表示されなくなっていました。
表示される理由を調査
理由を調べると、次のページの”自動ダウンロード プロンプト”の”これらの問題の解決法”に、ユーザーのクリックのイベントに同期させてダウンロードを実行する必要があることが書かれています。
"Windows XP Service Pack 2 セキュリティ強化機能搭載" での機能の変更点
現状はどのようなプログラムになっているのか
1.ダウンロードボタンをクリックする。
2.Ajaxでサーバー側に必要な情報を渡す。
3.サーバー側で非同期でファイルの作成を開始する。
4.サーバーから応答を返す。
5.Ajaxを使って、タイマーで定期的にファイルの作成情報を取得して、作成完了まで待機する。
6.ファイルの作成が完了したら、ダウンロードプログラムにsubmitする。
という動作をしています。
クリックのイベントが発生してから、ダウンロードプログラムのsubmitが同期されていないために、ダウンロードの警告が表示されるようです。
対処はどうすればいいのか
同期にするために、
1.ダウンロードボタンをクリックする。
2.Ajaxでサーバー側に必要な情報を渡す。
3.サーバー側で非同期でファイルの作成を開始する。
4.サーバー側で、タイマーで定期的にファイルの作成情報を取得して、作成完了まで待機する。
5.ファイルの作成が完了したら、サーバーから応答を返す。
6.ダウンロードプログラムにsubmitする。
としたら、ダウンロードの警告が表示されなくなりました。
ファイルサイズが大きいと、2.から5.まで時間がかかるために、ブラウザが接続を切断しないか心配でしたが、試した限りは大丈夫でした。
学んだこと
Internet Explorerでのファイルダウンロードを考えると、今回の方法がある。