Допустим, вы ожидаете загрузки Google Analytics. Теперь вы знаете, что при загрузке Google Analytics _gaq будет зарегистрирован в DOM. Таким образом, за исключением всех других (лучших) асинхронных опций, вы можете создать функцию, которая ожидает существования _gaq:
waitForGaq = function(fn, attemptsLeft) {
var tick = attemptsLeft || 30;
if (typeof(_gaq) != 'object' || !_gaq._getAsyncTracker) {
//_gaq isn't registered yet
if (tick > 1) {
//recurse
setTimeout(function() {
waitForGaq(fn, tick - 1);
}, 100)
}
else {
//no ticks left, log error
log('failed to load window.gaq');
}
}
else {
//gaq is loaded, fire fn
fn();
}
}
Итак, любой код должен быть запущен ПОСЛЕ регистрации _gaq, вы можете добавить на страницу таким образом:
waitForGaq(function() {
//here's all my code...
});
Повторюсь: повторение, подобное этому, необходимо, только если добавляемый скрипт не предлагает асинхронный способ взаимодействия с библиотекой. Google Analytics, например, является своего рода спорным примером, поскольку он предлагает более чистый подход:
http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html