Вставка Javascript во время выполнения, не может получить доступ к переменной - PullRequest
1 голос
/ 09 мая 2019

Я использую файлы JavaScript для хранения списков изображений и прочего. Я хочу прочитать один из этих файлов во время выполнения, во время загрузки страницы и после нажатия кнопки. Я могу загрузить файл javascript как скрипт, но не могу сразу получить доступ к его содержимому.

Это мое решение не использовать javascript для загрузки локальных файлов.

<script>
function Get_Slide_Show(Idx) {
  Raw_Album_Info = '';
  alert('Before: ' + Raw_Album_Info);
  albumPath = 'photos/' + albumList[Idx];
  var script = document.createElement('script');
  script.src = albumPath + '/album_info.js';
  // document.head.appendChild(script);
  document.getElementsByTagName('head')[0].appendChild(script);
  alert('After: ' + Raw_Album_Info);
}

function Load_Slide_Show(Idx) {
  Get_Slide_Show(Idx);
  Load_Album_Info();
}

function Init_Slide_Show() {
  Load_Album_List("photos");
  Load_Slide_Show(0);
  showSlides();
}
</script>

Init_Slide_Show запускается при загрузке страницы.

Load_Slide_Show запускается, когда пользователь нажимает кнопку.

Проблема в Get_Slide_Show. Он загружает и добавляет выбранный файл JavaScript, который просто что-то вроде

Raw-Album_Info = 'image1.jpg\n'+image2.jpg\n';

Я сбрасываю Raw_Album_Info при запуске, и первое предупреждение подтверждает это. Я ожидал, что второе предупреждение покажет новое значение для Raw_Album_Info. Это не так.

Если я уберу строку

Album_Info = ''; 

затем второй раз, когда я запускаю Get_Slide_Show, оповещения показывают значение от предыдущего вызова.

Так что я могу прочитать переменную, но не могу сразу получить к ней доступ. Должен ли я использовать insertBefore или вызывать какое-то обновление?

1 Ответ

0 голосов
/ 09 мая 2019

Загрузка элемента скрипта происходит асинхронно, иногда после добавления его в документ.Размещенный код пытается получить доступ к Raw_Album_Info до загрузки скрипта.

Попробуйте добавить обработчик события загрузки к элементу сценария, чтобы запускать код после его загрузки - можно получить доступ к значению Raw_Album_Info вобработчик впервые.

...