Internet Explorer の情報バー

  • IE + Windows XP SP2でダウンロードブロックの情報バーが表示されますが、抑止できないのでしょうか。


ファイルダウンロード時にメッセージを表示したい

  • ある社内用のWebシステムで、サイトからファイルをダウンロードさせる機能が必要でした。ブラウザはIE専用。
  • 操作感の都合上、ボタンをクリック→確認メッセージ表示→ファイルをダウンロードという流れにしたいとのこと。
    • 2回リクエストしなくちゃならない…クラサバなら簡単なことですが…


実装する

  • まあ、以下の流れでいけるかなと思ったのですが。
    • ユーザがダウンロードボタンをクリック。
    • サーバから、「メッセージ表示+OKボタンが押されたら、javascriptで再度リクエスト」するレスポンスを返す。
    • 再度リクエストに対して、ファイルをダウンロードするリクエストを返す。


実行してみる

  • アドレスバーの下にニョキっと情報バーが表示されてしまいました。
    • セキュリティ保護のため、このサイトによる、このコンピュータへのファイルのダウンロードがInternet Explorer によりブロックされました。
  • 確認メッセージなしで、ボタンをクリック→ファイルをダウンロードする場合は、情報バーは表示されないのですが、javascriptで再度リクエストすると、IEのセキュリティチェックに引っかかるらしい。
    • 別のサイトに飛ばすこともできるから?
  • とにかくこれでは使いにくい。

対策

  • いろいろ検索したり、周りに相談してみたのですが、コーディングで阻止することはどうも無理なようです。
    • まあ、記述方法で回避できたらブロックの意味がないですよね。
  • 仕方ないので、IEの設定で回避することになりました。
    • インターネットオプション→セキュリティ→ローカルイントラネット→サイト→詳細 で、サイトをゾーンに追加。
      • 要は、セキュリティ設定のダウンロード→ファイルのダウンロード時に自動的にダイアログを表示=有効にする になっていればOK。


検証用ソース

<?php
    if (isset($_POST['exec']) && $_POST['exec'] == '1') {
        header("Content-type: text/plain");
        header("Content-Disposition: attachment; filename=\"testfile.txt\"");
        echo "this is test file.\n";
        exit();
    }
?>
<html>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=UTF-8">
<title>ファイルダウンロード</title>
<script language="JavaScript">
    window.onload = function() {
        if (document.all.confirmform.confirm.value == '1') {
            alert("ダウンロードします");
            document.all.downloadform.submit();  // ダウンロードリクエストする
        }
    }
</script>
</HEAD>
<body>
<div>ファイルダウンロード</div>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST" name="confirmform">
<input type="hidden" name="confirm" value="<?php echo $_POST['confirm'] ?>" />
<input type="button" value="確認+ダウンロード" onclick="document.all.confirmform.confirm.value=1;document.all.confirmform.submit();" />
</form>

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST" name="downloadform">
<input type="hidden" name="exec" value="1" />
<input type="button" value="ダウンロード" onclick="document.all.downloadform.submit();" />
</form>

<body>
<html>

facebook slideshare rubygems github qiita