IEは自画面へのPOSTでダウンロード処理させると履歴が消える


履歴が消える!

IEにおいて、表示中のURLと同じURLへのpostでダウンロード処理をさせると、その画面の履歴が無くなります!
(ブラウザの戻るボタンで戻った時に、さっき見ていたはずのページが表示されません)

どういうこと?

ページ1→ページ2→ページ3とページ移動させるようなリンクが貼ってあるとしましょう。ページ2にはダウンロードボタンがあります。ダウンロード処理はページ2と同じURLで行います。

ページ1からページ2へ移動し、そこでダウンロードボタンを押してファイルをダウンロードしてから、ページ3へ移動します。

ブラウザの戻るボタンを押すと、ページ2に戻るはずがいきなりページ1に戻ってしまいます。

解決方法

ダウンロード処理を表示中のURLと違うURLにしましょう。末尾に「?」を付けるだけでもOK。

以下はColdFusionの例ですが、post先がaction="dltest2.cfm"と自分のURLになっている箇所をaction="dltest2.cfm?download"などダミーのパラメータを付加してやります。
本当はダウンロード処理を別モジュールにするべきなんでしょうけど、既に作ってしまって修正が面倒なときは参考にしてください。

dltest2.cfm
<CFIF isDefined("form.btnSubmit")>
    <CFHEADER name="Content-Disposition" value="attachment; filename=testfile.txt">
    <CFCONTENT type="text/comma-separated-values" file="e:\testfile.txt" deleteFile="no">
</CFIF>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>2番目のページ</title>
</head>
<body>
    <h3>2番目のページ</h3>
    <a href="dltest1.cfm">前へ</a> <a href="dltest3.cfm">次へ</a>
    <form method="post" action="dltest2.cfm">
        <input type="submit" name="btnSubmit" value="download">
    </form>
</body>
</html>