WindowsXP上のInternetExplorer7でファイルのダウンロードが行えない件 | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

Internet Explorer7がリリースされ約半年が経過し、そろそろ重要な更新でこのソフトウェアが配布されるようになる頃かと思っていましたが、MicrosoftTechNet を見てみると重要な更新に含まれる時期は、第3四半期に延期されたらしいです。


※ 2007/09/12 追記

配布される時期はさらに延期され、2008年以降になったようです。

WindowsXPでのInternet Explorer7の自動更新による配布は2008年以降に 」参照


ちなみに、このページに書かれている「Internet Explorer 7 Blocker Toolkit」は、重要な更新に含まれるInternet Explorer7の配布をブロックするものらしい。


で、私が管理しているWebシステムで各種Internet Explorer7上の動作検証を進めていってるのですがやっぱり幾つか問題が発生しています。

その一番大きな問題となっているのが表題の件です。


具体的には、下記のダウンロードを行おうとしている画面で止まります。

(あたかもダウンロードしているようには見えますが、延々と待っても終わりません)


ファイルDLエラー


この際の挙動として


【挙動1】

ダウンロード画面(上記)が延々と続き、キャンセルして繰り返しアクセスしてもダウンロードが出来ない


【挙動2】

1度目のアクセスは、ダウンロード画面(上記)が延々と続きダウンロードできないが、キャンセルして続けてアクセスするとダウンロードが行える


という2パターンを確認しています。


ファイルがダウンロードできない件については、Microsoftサポートオンラインに情報が掲載されています。


Windows XP を実行しているコンピュータで、Windows Internet Explorer 7 を使用してファイルを
ダウンロードできないことがある


ただ、ここに掲載されている回避方法がちょっといただけない・・・。

修正プログラムはあるようですが、Microsoft Updateから配布されているものではなく個別に問合せて入手しなければならないようですし、入手できたとしても問題が発生しているPCにのみ適用させろと言っています。

まぁ、PC管理している規模が大きいと到底無理な対応ですね・・・。


本件の問題の原因はというと、同ページ内にはXP上の日本語IMEが悪さをしているような事を書いており、回避策としてそれを無効化する設定にしろと書いています。

(設定方法は、同ページ内の「回避策」の欄を参照)


ただ、この無効化する設定画面には


ファイルDL回避XP設定


って、書いている・・・。

東アジアのユーザーにはお勧めしない事を何故回避策として書いているのだろうか・・・。


結論から言えば、確かに私の管理しているシステムで発生したファイルのダウンロードが正常に行えない件は、これで解決しました。

ただ、このようなパッチや回避策を社内で展開するわけにもいかないので、幾つか検証した結果と、その回避策を書きます。



まず、ファイルをダウンロードさせる方法ですが私の環境では下記の2つがあります。


【アクセス方法1】
ドキュメントルート内に置いてあるファイルに直接リンクしている方法


例)

<a href='/file/hogehoge.xls'>ファイルのダウンロード</a>

【アクセス方法2】
ドキュメントルート外に置いたファイルをダウンロードさせるために、該当のファイルを呼び出して適切なヘッダーを出力するプログラムを介してダウンロードする方法


例)

呼び出し元

<form action='hogehoge.php' method='post'><input type='submit' value='ファイルのダウンロード'></form>

呼び出し先(hogehoge.php)

<?php

$file_path = "/web/files/hogehoge.xls";
$filesize = filesize($file_path);

header("Content-Length: $filesize");
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: $cat;filename=\"hogehoge.xls\"");
readfile($file_path)

?>

で、これらについて検証しているうちに呼び出し方法や、Internet Explorer7のタブの設定など幾つかの前提条件により、ダウンロードできないケースがあることが分かりました。


【前提1】

インターネットオプションのタブの設定で、ポップアップ発生時の挙動として、新しいウィンドウでポップアップを開く設定にしている


※ 設定方法は、「インターネットオプション」→「全般」タブの「タブ」の「設定」ボタンをクリック→「ポップアップの発生時」の

  「常に新しいウィンドウでポップアップを開く」にチェックが入っている


IE7タブ設定


【前提2】

アンカー又はフォームタグ内に「target='_blank'」を指定している


上記の前提を満たすときに、ダウンロードが正常に完了しませんでした。


※ 【前提2】と似たものになりますが、JavaScriptのwindow.open()を使った場合も同様の減少が発生しました。



で、回避する方法として、


【前提1】が設定されている場合は


(システム側での回避策)

・ ファイルをダウンロードさせる方法(アンカーやフォーム)で、「target='_blank'」の指定をやめる


とする。

また、【前提2】が設定されている場合は、


(クライアント側での回避策)

・ ポップアップ発生時の挙動を「常に新しいタブでポップアップを開く」に設定


する事で【挙動1】は回避できました。

ただし、相変わらず【挙動2】は発生する可能性があります。

(確率はかなり低くなるんですがね)


※ あくまで私の環境上での話です。


原因が、IMEだと言う事だったんですが何故かファイルをダウンロードするさいに新しくウィンドウを開いてアクセスすると現象が発生。

また、PDFは上記の前提に係わらず正常にダウンロードできたりします。

ファイルの種類(またはファイル名)によっても挙動が異なってくる可能性があります。


結構致命的な問題なんで本件が解決するまで、Microsoft Updateの重要な更新で配布するのは待ってほしいものです。