Это возможно.
Я, вероятно, подхожу к этому так:
Сначала создайте функцию для загрузки скриптов.
function loadScript(src) {
var s = document.createElement('script'), x;
s.type = 'text/javascript';
s.async = true;
s.src = src;
x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(x, s);
}
Этого достаточно для загрузкисценарии, но как мы узнаем, когда он закончил загрузку или вообще не загружался?
Давайте добавим два параметра обратного вызова (один для успеха и один для сбоя) и параметр тайм-аута.Нам также нужно будет прикрепить прослушиватель событий к нашему элементу script
, чтобы запускать обратные вызовы при его загрузке.
function loadScript(src, onSuccess, onFail, timeout) {
var s = document.createElement('script'), x, loaded;
s.type = 'text/javascript';
s.async = true;
s.src = src;
s.onload = s.onreadystatechange = function() {
if (''+s.readyState).match(/^(|complete|loaded|uninitialized)$/) {
loaded = true;
onSuccess && onSuccess();
s.onload = s.onreadystatechange = null;
}
}
if (onFail) {
setTimeout(function(){loaded || onFail();}, timeout || 5000);
}
x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(x, s);
}
Полное раскрытие:
- Это полностью не проверено.
- Первый блок кода оторван от Google Analytics, с немного менее уродливым кодом.
- Второй блок кода оторван от yepnope после просмотра ответа Слейса, с немного более уродливым, ноболее кратко, код.