Ответ 1
ты почти там.
в вашей функции callimeout callback выполните следующие действия:
var script = document.createElement('script');
script.src = "http://whatever.com/the/script.js";
document.getElementsByTagName('head')[0].appendChild(script);
Итак, если у меня есть следующее:
<script type="text/javascript" src="offsite file I am referencing"></script>
и я просто хочу отложить выполнение вызова этого файла с помощью setimeout, как бы я это сделал?
Очень странно, что у меня не возникло бы проблемы с использованием setimeout на простой функции, но я как бы застенчив в этой, казалось бы, более простой ситуации.
Я подумал бы, что я мог бы просто создать функцию, которая вызывает этот файл через х количество времени, но вызов файла в функции, кажется, ускользает от меня.
ты почти там.
в вашей функции callimeout callback выполните следующие действия:
var script = document.createElement('script');
script.src = "http://whatever.com/the/script.js";
document.getElementsByTagName('head')[0].appendChild(script);
Самый простой способ - позволить загрузке файла 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.
Вы можете использовать DOM-манипуляцию для создания нового тега script во время выполнения. Добавление его в документ загрузит внешний JS файл так же, как если бы вы ввели его в HTML в первую очередь.
var loadScript = function(sourceSrc){
var scriptTag = document.createElement('script');
scriptTag.src = scriptSrc;
document.getElementsByTagName('head')[0].appendChild(scriptTag);
}
Если целью этого упражнения является отсрочка загрузки внешних ресурсов для имитации потенциальных сценариев реальной жизни (например, при загрузке сторонних виджетов и т.д.), я бы пошел по совсем другому маршруту.
Ниже перечислены две различные реализации прокси-сервера задержки, которые могут использоваться для имитации и тестирования неожиданных сетевых условий:
Оба они работают с использованием префикса типа /delay/5000/
для указания периода моделирования задержки.
<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 не является асинхронным, а также как обойти эти случаи.