Hebikuzure's Tech Memo

2011年5月27日

IE9 でダウンロードの際に通知バーではなくダイアログが表示される場合がある

Filed under: Internet Explorer — hebikuzure @ 8:13 午後

Internet Explorer 9 では多くの改善から行われていますが、中でもファイルのダウンロードの際のユーザー インターフェイスは大きく変更されています。IE8 以前のバージョンではダウンロードを開始するとそれを保存するか開く (実行する) かを選択するモーダルなダイアログ ボックス (下図) が表示され、そのダイアログボックスで何かボタンをクリックしない限り元の Web ページでの作業を続ける事ができませんでした。

image

これに対して IE9 ではダウンロードの通知はウィンドウ下部の通知バーに表示され、また通知バーで何か選択しなくても元の Web ページでの作業を継続できます

image

ところが IE9 でもファイルのダウンロードを開始すると通知バーではなく以下のようなモーダルなダイアログ ボックスが表示される場合があります。

image

通知バーが表示される場合と、モーダルなダイアログボックスが表示される場合の違いについて情報が無いか Microsoft のサイトを見ているのですがこれという物が見つからないため、手元で少し検証してみました。その結果、特定の条件でダウンロードが行われる場合、通知バーではなくダイアログが表示される事が確認できました。

今の所確認できる条件は

  • ダウンロードするファイルの種類が Office のドキュメント (Word 文書、Excel ワークブック、PowerPoint プレゼンテーション) か、Windows Explorer で開けるアーカイブ ファイル (.zip や .cab) である
  • ダウンロードするファイルへの直接リンクからダウンロードを開始している(<a href=”hogehoge.docx”>ダウンロード開始</a> のようなリンクをクリックして開始している)
  • サーバーが応答 HTTP ヘッダーで content-disposition: attachment ヘッダーを返さない

の三つが満たされた場合です。逆に言えばこれ以外の場合は、ダウンロードを開始すると通知バーが表示されます。

前述のようにダイアログ ボックスが表示されるとそのダイアログを処理しない限り元のページに戻れませんから、通知バーが表示される方がユーザー エクスペリエンスは良好です。そのためファイルをダウンロードさせるサーバーの管理者は、可能ならダイアログ ボックスが表示されないようにした方が良いでしょう。

対処方法

静的な Office ドキュメントや ZIP ファイルへのリンクからダウンロードさせる場合は、content-disposition: attachment ヘッダーを付加する。
これでダイアログではなく通知バーが表示されるようになる事を手元の検証で確認しています。


さてどうしてこれらの条件を満たすと通知バーが表示されずダイアログが出てくるのか、その理由ですが、この条件に該当する種類のファイルが Internet Explorer から開かれる方法に関係しているのではないかと推測しています。以下、十分な根拠のない推測ですが参考までに書いておきます。

一般的に Internet Explorer でダウンロードしたファイルに対して [開く] の操作をした場合、ファイルはインターネット一時ファイルフォルダー(Temporary Internet Files) にダウンロードされ、そこから通常のローカル ファイルを開くのと同様に拡張子を基にして DDE を利用してファイルを開くアプリケーションが起動されます。例外はアプリケーションが COM のインターフェイスを持っている場合で、Internet Explorer が拡張子と MIME Type からダウンロードしたファイルに関連付けられているアプリケーションを調べて、そのアプリケーションが COM のインターフェイスを持っている場合は COM 経由でアプリケーションが呼び出されます。
Office アプリケーションも COM インターフェイスを持っているので後者の呼び出され方をされます。そのため IE から Office にシームレスに開くファイルを引き渡す事ができます。現在のバージョンでは既定で無効なのですが、Web サイト上の Office の文書を Internet Explorer のウィンドウ内に表示される事ができるのも、こうした仕組みのためです。Office ファイルのダウンロードで通常の通知バーと異なるダイアログ ボックスが出てくるのはこうした動作に関連するのではないかというのが現時点での推測です。

ZIP や CAB などの処理を行う Windows エクスプローラー (explorere.exe、要するに Windows の GUI シェル) もCOM インターフェイスを持つため、同様に Internet Explorer から COM 経由で呼び出されているのではないかと考えられ、そのため Office ドキュメントと同様の挙動になるのではないかと推測しています。また content-disposition: attachment ヘッダーがある場合は強制的にいったんダウンロードする動作になることから、ダイアログではなく通知バーが表示される挙動に変化すると考えています。

(2011/6/4 追記)
本件の動作について手持ちのインシデントを使って Microsoft プロフェッショナル サポートに調査依頼を出したところ、上記の推測が正しい事が確認できました。Office ドキュメントや ZIP、CAB などに限らず、IE から呼び出すことのできる COM インターフェイスを持つアプリケーションに関連付けられているファイルは、content-disposition: attachment ヘッダー無しではダウンロード ダイアログが表示される動作になっているとの事です。
またクライアント側での回避策はなく、サーバー側では content-disposition: attachment ヘッダーを付加する事が妥当な回避策となります。IIS (7.0 以降) での設定方法についてはこちらに詳しい情報があります。

3件のコメント »

  1. […] IE9 のウィンドウ内に Office ドキュメントを表示する カテゴリー: Internet Explorer — hebikuzure @ 4:27 PM 「IE9 でダウンロードの際に通知バーではなくダイアログが表示される場合が…」の記事中で […]

    ピンバック by IE9 のウィンドウ内に Office ドキュメントを表示する « Hebikuzure's Tech Memo — 2011年6月9日 @ 4:27 午後

  2. […] ていうか、なぜこんな結果になるんだろうといろいろ調べていると、ダイアログが表示される条件を書かれているサイトがありました。 IE9 でダウンロードの際に通知バーではなくダイアログが表示される場合が… より引用 […]

    ピンバック by IE9でファイルをダウンロードする場合の通知バー表示とダイアログ表示の違いについて | Anymmt.blog — 2012年5月31日 @ 1:41 午前


RSS feed for comments on this post. TrackBack URI

コメントを残す

WordPress.com で無料サイトやブログを作成.