ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

Internet Explorerでダウンロードの警告が表示される理由と対処方法

最初は理由がわかりませんでしたが、わかると納得できました。

f:id:AJYA:20121228214604j:plain

 

ダウンロード警告が表示される

以前から、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でのファイルダウンロードを考えると、今回の方法がある。

今後はこのようにしなくてもいいように、仕様打ち合わせ時に、ファイル作成とファイルダウンロードのボタンを用意する方式の提案もしていきたい。