JavaScripでファイルのダウンロードが完了したかを検知する方法

プログラミング

jQueryのプラグインを用いた方法などは紹介されていますが、プラグインを用いない方法がなかったので紹介します。

仕組みの概要

  1. ブラウザ側:ページを表示したときにダウンロード検知用のCookieを削除する
  2. ブラウザ側:ボタンを押したときにsetIntervalで定期的にCookieの監視を開始
  3. サーバー側:ファイルをダウンロードしたときにCookieを発行する
  4. ブラウザ側:Cookieを検知したときにダウンロード完了ページに遷移する

(参考ページ)javascriptでダウンロード終了を検知する

JavaScriptのコード例

Nameに「downloaded」、valueに「yes」を設定してCookieを発行したときのソースコードです。

また、Cookie有無の監視は3秒ごとにしています。

idが「download」のボタンを押すことで動作します。

/* ダウンロードボタンを押した後から3秒ごとにCookieの有無を監視 */
document.getElementById("download").onclick = function () {
  const ObserveCookie = window.setInterval(function () {
    //データを1つずつに分ける
    var r = document.cookie.split(';');

    //cookie名と値に分ける
    r.forEach(function (value) {
      var content = value.split('=');
      var name = content[0];
      var value = content[1];

      if (name == "downloaded" && value == "yes") {
        // Cookieがある場合
        console.log("ダウンロード完了");
        location.href = "/downloaded"; // 別ページに遷移する
        window.clearInterval(ObserveCookie);
        DeleteCookie();
      } else {
        // Cookieがない場合
        console.log("Cookieなし");
      }
    })
  }, 3000)
}

/* Cookieを削除する関数の定義 */
function DeleteCookie() {
  var date = new Date(); //日付データを作成
  date.setTime(0); //1970年1月1日00:00:00の日付データをセット
  document.cookie = "downloaded=yes;expires=" + date.toGMTString(); //有効期限を過去にして書き込む
}
タイトルとURLをコピーしました