@chegcheg

Как проверить, загружен ли файл js?

Написал функцию, которая подключает на страницу файл js и после загрузки этого файла выполняет нужный код (callback):

const loadJS = (src, cb) => {
  let script = document.createElement('script');
  script.setAttribute('src', src)
  document.body.appendChild(script); // формируем тег и вставляем на страницу

  script.onload = () => { // после загрузки
    if (cb && typeof cb == 'function') {
      cb.call(); // выполняем callback
    }
  }
}

Дальше возникла логичная необходимость проверять - был ли уже загружен файл при предыдущих выполнениях loadJS()?
Не придумал ничего лучше, как записывать все подключенные ранее файлы в массив и искать url в нем:

const loadJS = {
  loaded: [],
  load(src, cb) {
    let _this = this;

    if (!_this.loaded.includes(src)) { // если url не найден в массиве загруженных файлов
      let script = document.createElement('script');
      script.setAttribute('src', src)
      document.body.appendChild(script); // формируем тег и вставляем на страницу

      script.onload = () => { // после загрузки
        _this.loaded.push(src); // добавляем url в массив

        if (cb && typeof cb == 'function') {
          cb.call(); // выполняем callback
        }
      }
    } else { // если url найдет в массиве загруженных файлов
      if (cb && typeof cb == 'function') {
        cb.call(); // выполняем callback
      }
    }
  }
}

loadJS.load('https://api-maps.yandex.ru/2.1/?lang=ru_RU', function() {
  console.log('Yandex Maps API loaded'); // или какой-то другой код
});


Отрабатывает как мне нужно.
Но насколько это правильный подход?
Может быть, можно сделать более качественную и точную проверку?
  • Вопрос задан
  • 460 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы