経緯
実務で実装を行なっているときに、こんなバグを発見しました。
window.open()を使用して別ウィンドウを開き、複数ファイルをダウンロードする処理があるが、ファイル名001~ファイル名010までが順番通りにダウンロードされないという現象です。
試したこと
最初は遅延処理を入れて、ダウンロード処理とダウンロード処理の間に間隔を入れてみましたが解決には至りませんでした。
解決策
結論から言うと、 $(window).on('unload', function() {}); を使用することで解決しました。
unloadイベントはページが閉じられる時などに処理を行うことができます。
具体的には、以下のようなソースコードで今回の問題を解決しました。
qiita.js
function downloadFile() {
var wdl = window.open(URL);
$(wdl).on('unload', function () {
// 再起処理
if (ダウンロード数 条件) {
downloadFile()
}
});
}
警告
検証ブラウザはChromeなため、他ブラウザでは今回のバグが解決可能か不明です。
また上記の理由により、unloadは非推奨となっているのでお気をつけください!