<script> onload срабатывает, когда ...? - PullRequest
0 голосов
/ 04 июня 2019

В приведенной ниже функции из Mozilla JS используется для добавления тега в документ. Я запутался, когда сработало событие onload. Onload срабатывает, когда скрипт начинает загружаться или уже загрузился?

function prefixScript(url, onloadFunction) {
  var newScript = document.createElement("script");
  newScript.onerror = loadError;
  if (onloadFunction) { newScript.onload = onloadFunction; }
  document.currentScript.parentNode.insertBefore(newScript, document.currentScript);
  newScript.src = url;
}

https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement

Спасибо

Ответы [ 2 ]

1 голос
/ 04 июня 2019
Обратный вызов

onload вызывается, когда они были завершены:

  1. HTTP-запрос для извлечения файла сценария был успешно выполнен
  2. Содержание скрипта было проанализировано
  3. Сценарий был выполнен, таким образом возможно выставив новые глобальные переменные и / или вызвав побочные эффекты, такие как манипулирование DOM или XHR

Вот демонстрационная версия, где скриптБиблиотека jQuery добавлена ​​в <head>, что позволяет использовать глобальную переменную $, созданную при выполнении импортированного скрипта:

const script = document.createElement('script');
script.onload = () => {
  try {
    $;
    console.log('onload - $ is defined');
  } catch(e) {
    console.log('onload - $ is not defined yet');
  }
}

script.src = 'https://code.jquery.com/jquery-3.3.1.js';

try {
  $;
  console.log('main - $ is defined');
} catch(e) {
  console.log('main - $ is not defined yet');
}
document.head.appendChild(script);

Последняя точность - в этом случае загрузка запускается добавлением скрипта в DOM, а не script.src = ...!Попробуйте закомментировать последнюю строку - скрипт не загружается.

Также могут быть другие случаи, когда загрузка запускается script.src = ..., например, когда скрипт добавляется в DOM, .srcустановлен.

0 голосов
/ 04 июня 2019

Из документов MDN GlobalEventHandlers.onload :

Событие загрузки срабатывает, когда данный ресурс загрузил .

Существует также событие для onloadstart , вызываемое при запуске загрузки для этого ресурса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...