Порядок сценариев onload и window.onload хорошо определен, когда сценарий является узлом DOM, созданным динамически из загруженного сценария? - PullRequest
0 голосов
/ 31 октября 2018

Файл loader.js:

function main()
{
  if (typeof window !== 'undefined') {
    var script = window.document.createElement('script')
    script.src = 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.min.js'
    script.onload = function () { console.log('script loaded') }
    window.onload = function () { console.log('window loaded') }
    window.document.head.appendChild(script)
  } else {
    console.log('window not available yet')
  }
}

if (typeof module !== 'undefined' && module.exports) {
  exports.main = main
}

main()

Файл window.html:

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
    <script src="loader.js"></script>
  </head>
  <body>
    <div>Test</div>
  </body>
</html>

Вывод на консоль при открытии этой HTML-страницы:

script loaded
window loaded

Мой вопрос:

В приведенном выше коде гарантируется, что событие загрузки сценария всегда срабатывает до загрузки окна?

1 Ответ

0 голосов
/ 31 октября 2018

Да, вывод, который вы видите, гарантирован, потому что событие load запускается «когда ресурс и его зависимые ресурсы завершили загрузку». window не будет полностью загружен до тех пор, пока не будет загружен и готов каждый элемент с чем-либо для загрузки, включая сценарии и изображения. Таким образом, <script> должен загружаться до загрузки window.

Тот факт, что есть сценарий, который создается динамически, не будет иметь эффекта (при условии, что main вызывается до полной загрузки окна, как в вашем коде) - после вставки в DOM это теперь что-то окно зависит от, и поэтому должно load, прежде чем окно делает.

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