Toliak

JS file download

Jun 7th, 2018
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function (from = 6000743, to = 6000745, url) {
  2.     const INTERVAL = 250;                           // Интервал между запросами
  3.     window.g_timer_timestamp = Date.now();
  4.     window.g_counter = from;                        // Счетчик
  5.     window.g_aviable = true;                        // Если прошлый файл не скачался, новое скачивание не начинается
  6.  
  7.     let f = function() {
  8.         window.g_aviable = false;                   // Блокируем
  9.        
  10.         // AJAX запрос
  11.         let xhr = new XMLHttpRequest();
  12.         xhr.open("GET", `${url}${window.g_counter}`);
  13.  
  14.         xhr.addEventListener("readystatechange", function() {
  15.             if (this.readyState != 4) return 0;
  16.  
  17.             if (xhr.status != 200) {
  18.                 console.log(xhr.status + ': ' + xhr.statusText);
  19.             } else {
  20.                 // Проверка на длину ответа
  21.                 if (xhr.response.length < 5) {
  22.                     console.log(`${url}${window.g_counter} small`);
  23.                 } else {
  24.                     // Создаем <a>
  25.                     let a = document.createElement("a");
  26.                     a.download = `${window.g_counter}.xml`;
  27.                     a.href = `data:text/plain;charset=utf-8,${encodeURIComponent(xhr.response)}`;
  28.                    
  29.                     // Имитируем нажатие ЛКМ
  30.                     let e = new MouseEvent("click");
  31.                     e.which = 1;
  32.                     a.dispatchEvent(e);
  33.                 }
  34.  
  35.                 window.g_aviable = true;            // Разблокируем
  36.             }
  37.         });
  38.  
  39.         xhr.send(); // Получаем
  40.     };
  41.  
  42.     let timer = function () {
  43.         // Проверка интервала и состояния предыдущего файла
  44.         if (!(Date.now() - window.g_timer_timestamp >= INTERVAL && window.g_aviable)) return requestAnimationFrame(timer);
  45.  
  46.         window.g_timer_timestamp = Date.now();      // Обновляем отсчет времени
  47.         f();                                        // Основная функция
  48.         window.g_counter++;                         // Увеличиваем счетчик
  49.  
  50.         if (window.g_counter > to) return 0;        // Если цикл выполнен, выходим
  51.         requestAnimationFrame(timer);               // timer поставлен в очередь на рендер
  52.     };
  53.  
  54.     requestAnimationFrame(timer);                   // timer поставлен в очередь на рендер
  55. })(1,3,"/url/");
  56. // От, до, кусок ссылки
Add Comment
Please, Sign In to add comment