ブラウザ上で何らかのファイルをダウンロードさせた際、ダウンロード完了のタイミングを検知する方法
ページ上でボタンをクリックすると画像や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
関連記事
-
-
SortableJSを使ってデータの並べ替え&保存
あるシステムを拝見した際にtableタグ内に並んでいる項目をドラッグ&ド ...
-
-
日本地図のクリッカブルマップをjQueryで実装する方法(japan-map)
JavaScriptもしくはjQueryで日本地図を表示し、都道府県や八地方区分 ...
-
-
モーダルウィンドウ表示時にウィンドウのスクロール位置をリセットする方法
モーダルウィンドウ内で「縦にスクロール→ウィンドウを閉じる→改めてモーダルウィン ...
-
-
NicEdit(WYSIWYGエディタ)とテキストエリアの切り替え
チェックボックスのON / OFFでNicEdit(WYSIWYGエディタ)とt ...
-
-
jQueryで特定のdata属性をセレクタとして指定する方法
jQueryで特定のdata属性をクリックした際に何らかのイベントを実行したかっ ...