ブラウザ上で何らかのファイルをダウンロードさせた際、ダウンロード完了のタイミングを検知する方法
ページ上でボタンをクリックすると画像やzipファイル等をダウンロードできるというシステムがあり、ダウンロード完了のタイミングを検知しJavaScriptでアラートを表示する等、何らかの処理を行いたいというケースがあった。以下にJavaScriptとjQueryでの対応方法をメモ。
対応方法
JavaScript
<button id="dl_btn">ダウンロード</button>
<script>
//ダウンロード対象のファイル
var dl_file = `test.pdf`;
document.getElementById(`dl_btn`).addEventListener(`click`, async () => {
//バーがからファイルを取得
const response = await fetch(dl_file);
//取得した内容をblob(バイナリデータ)として読み込み
const blob = await response.blob();
//blobをブラウザ内で一時的に参照可能なURLに変換
const url = URL.createObjectURL(blob);
//aタグを生成し、ファイルをダウンロードさせる
const a = document.createElement(`a`);
a.href = url;
a.download = dl_file;
a.click();
//blobのURLを破棄してメモリを解放
URL.revokeObjectURL(url);
//ダウンロード完了後にアラートを表示
alert(`ダウンロード完了(JS版)`);
});
</script>
jQuery
<button id="dl_btn">ダウンロード</button>
<script>
//ダウンロード対象のファイル
var dl_file = `test.pdf`;
$(function(){
$(`#dl_btn`).on(`click`, function () {
$.ajax({
url: dl_file,
method: `GET`,
xhrFields: {
//レスポンスをblob(バイナリデータ)に指定
responseType: `blob`
}
})
.done(function( blob ){
//blobをブラウザ内で一時的に参照可能なURLに変換
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = dl_file;
a.click();
//blobのURLを破棄してメモリを解放
URL.revokeObjectURL(url);
//ダウンロード完了後にアラートを表示
alert(`ダウンロード完了(jQuery版)`);
})
.fail(function(){
//エラー時の処理
});
});
});
</script>
リファレンス
blob
https://developer.mozilla.org/ja/docs/Web/API/Blob
createObjectURL
https://developer.mozilla.org/ja/docs/Web/API/URL/createObjectURL_static
revokeObjectURL
https://developer.mozilla.org/ja/docs/Web/API/URL/revokeObjectURL_static
関連記事
-
-
jQueryにて指定した要素の親要素を削除する方法
jQueryにて指定した要素の親要素を削除したいケースがあった。通常の場合だと親 ...
-
-
jQueryで指定した可変(レスポンシブ)要素のposition / width / heightを取得する方法
jQueryで指定した要素のposition(leftやtop) / width ...
-
-
jQueryのanimate()でページスクロール後に他の処理を実行させる方法
jQueryのanimate()でページスクロール後に特定の要素を非表示にしたい ...
-
-
JavaScript / jQueryで〇番目、最初、最後の要素を指定する方法
jQueryでリストタグ(<li>)の〇番目、最初、最後の要素を指定 ...
-
-
サムネイルをクリックすると拡大画像を表示できる「Lightbox2」の利用方法
画像をサムネイル表示してクリックしたら大きく表示するというのがLightboxで ...