Задержка script загрузка

Итак, если у меня есть следующее:

<script type="text/javascript" src="offsite file I am referencing"></script>

и я просто хочу отложить выполнение вызова этого файла с помощью setimeout, как бы я это сделал?

Очень странно, что у меня не возникло бы проблемы с использованием setimeout на простой функции, но я как бы застенчив в этой, казалось бы, более простой ситуации.

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

Ответы

Ответ 1

ты почти там.

в вашей функции callimeout callback выполните следующие действия:

var script = document.createElement('script');
script.src = "http://whatever.com/the/script.js";
document.getElementsByTagName('head')[0].appendChild(script);

Ответ 2

Самый простой способ - позволить загрузке файла script нормально и просто вызвать в нем главную функцию с помощью setTimeout() следующим образом:

<script type="text/javascript" src="offsite file I am referencing"></script>
<script type="text/javascript">
setTimeout(executeMainFunction, 5000);    // function in offsite js file
</script>

Если вы не можете сделать это по какой-либо причине, вы можете отложить загрузку внешнего файла script следующим образом:

setTimeout(function() {
    var headID = document.getElementsByTagName("head")[0];         
    var newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = 'http://www.somedomain.com/somescript.js';
    headID.appendChild(newScript);
}, 5000);

Здесь приведена справочная статья по динамической загрузке файлов script (и других типов ресурсов): http://www.hunlock.com/blogs/Howto_Dynamically_Insert_Javascript_And_CSS.

Ответ 3

Вы можете использовать DOM-манипуляцию для создания нового тега script во время выполнения. Добавление его в документ загрузит внешний JS файл так же, как если бы вы ввели его в HTML в первую очередь.

var loadScript = function(sourceSrc){
    var scriptTag = document.createElement('script');
    scriptTag.src = scriptSrc;
    document.getElementsByTagName('head')[0].appendChild(scriptTag);
}

Ответ 4

Если целью этого упражнения является отсрочка загрузки внешних ресурсов для имитации потенциальных сценариев реальной жизни (например, при загрузке сторонних виджетов и т.д.), я бы пошел по совсем другому маршруту.

Ниже перечислены две различные реализации прокси-сервера задержки, которые могут использоваться для имитации и тестирования неожиданных сетевых условий:

Оба они работают с использованием префикса типа /delay/5000/ для указания периода моделирования задержки.

Ответ 5

Mozilla Developer Network объясняет различные подходы:

MDN Async Script Методы

<script async src="file.js"></script>

или

var script = document.createElement('script');
script.src = "file.js";
document.body.appendChild(script);

или если ваш JavaScript находится в строке:

var blob = new Blob([codeString]);
var script = document.createElement('script');
var url = URL.createObjectURL(blob);
script.onload = script.onerror = function() { URL.revokeObjectURL(url); };
script.src = url;
document.body.appendChild(script);

Существует также хорошая информация, когда async не является асинхронным, а также как обойти эти случаи.