Imaginons que vous attendiez le chargement de Google Analytics. Maintenant, vous savez que lorsque Google Analytics se charge, _gaq sera enregistré sur le DOM. Donc, sauf tous les autres (mieux) options asynchrones, vous pouvez créer une fonction qui attend l'existence de _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();
}
}
Ainsi, tout code doit courir après _gaq est enregistré, vous pouvez ajouter à la page thusly :
waitForGaq(function() {
//here's all my code...
});
réitérer: récursion comme celui-ci est nécessaire que si le script que vous ajoutez n'offre pas une manière asynchrone d'interagir avec la bibliothèque. Google Analytics, pour un, est une sorte d'exemple sans objet car il offre une approche plus propre:
http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html
après que javascript a fini de faire quoi? et qu'essayez-vous de faire exactement? – Victor
Qu'entendez-vous exactement par "après la fin d'un script JavaScript"? Voulez-vous dire, après un appel de fonction JavaScript particulier est revenu? – Pointy
Une chose qui m'embrouille, c'est que le terme «JavaScript» n'a pas forcément beaucoup de sens; c'est essentiellement le même que "un Python" ou "un PHP" ou "un Ruby". JavaScript est un langage de programmation, alors même s'il est facile d'imaginer ce que quelqu'un pourrait vouloir dire en utilisant le terme «JavaScript», il est difficile de savoir exactement ce qui est juste parce que le terme est essentiellement insignifiant. – Pointy