Означает ли добавление ссылки на внешний скрипт немедленную загрузку? - PullRequest
1 голос
/ 16 февраля 2011

Если я запускаю следующий код,

document.getElementsByTagName('head')[0].innerHTML +=
                        '<script src="http://..."></script>';

... Гарантируется ли, что скрипт загружен до выполнения следующей строки кода?

Другими словами, еслиследующая строка обращается к чему-то во внешнем скрипте, это вызовет ошибку или это сработает?

Ответы [ 2 ]

1 голос
/ 16 февраля 2011

Это очень странный способ динамического добавления скрипта. Используемые здесь методы DOM подразумевают загруженный документ, но изменение innerHTML предполагает, что вы пытаетесь изменить источник документа, который обычно не работает после загрузки документа.

Существует еще два привычных способа использования JS для привлечения большего количества JS:

  • Перед загрузкой документа вы можете

    document.write('<script src="' + scriptSource + '"></scri' + 'pt>');
    

    В этом случае сценарий будет загружен сразу после завершения текущего блока <script> (но не до тех пор - поэтому последующие операторы JS в том же блоке будут работать лучше всего).

  • После загрузки документа использование document.write не работает, поскольку оно уничтожит существующий документ, поэтому вместо этого вы можете использовать методы DOM для создания и добавления script элемента

    var scriptEl = document.createElement('script');
    scriptEl.src = scriptSource;
    document.getElementsByTagName('head')[0].appendChild(scriptEl);
    

    В этом случае загрузка сценария будет происходить асинхронно - вы можете подключить onload слушатель к созданному элементу script, чтобы получать уведомления о его загрузке.

0 голосов
/ 16 февраля 2011

Да, но любой код, связанный с событием window.load или document.load, еще не был запущен.

...