(ページの作成: == Internet Explorer の情報バー == *IE + Windows XP SP2でダウンロードブロックの情報バーが表示されますが、抑止できないのでしょうか。 ...)
 
(検証用ソース)
 
32行目: 32行目:
  
 
=== 検証用ソース  ===
 
=== 検証用ソース  ===
 +
<pre>
 +
<?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>
  
  <?php
+
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST" name="downloadform">
      if (isset($_POST['exec']) && $_POST['exec'] == '1') {
+
<input type="hidden" name="exec" value="1" />
          header("Content-type: text/plain");
+
<input type="button" value="ダウンロード" onclick="document.all.downloadform.submit();" />
          header("Content-Disposition: attachment; filename=\"testfile.txt\"");
+
</form>
          echo "this is test file.\n";
+
 
          exit();
+
<body>
      }
+
<html>
  ?>
+
</pre>
  <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>
+

2011年1月5日 (水) 16:46時点における最新版

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