Je n'ai pas de référence à portée de main, mais les balises script sont traitées dans l'ordre, et donc si vous mettez votre $(document).ready(function1)
dans une balise script, après les balises script qui définissent function1, etc.
<script type='text/javascript' src='...'></script>
<script type='text/javascript' src='...'></script>
<script type='text/javascript'>
$(document).ready(function1);
</script>
Bien sûr, une autre approche serait de s'assurer que vous n'utilisez qu'une seule balise script, au total, en combinant les fichiers dans le cadre de votre processus de construction. (À moins que vous ne chargiez les autres depuis un CDN). Cela contribuera également à améliorer la vitesse perçue de votre page.
EDIT : Je viens de réaliser que je n'ai pas vraiment répondu à votre question : Je ne pense pas qu'il y ait un événement inter-navigateur qui soit déclenché, non. C'est possible si vous travaillez assez dur, voir ci-dessous. Vous pouvez tester les symboles et utiliser setTimeout pour replanifier :
<script type='text/javascript'>
function fireWhenReady() {
if (typeof function1 != 'undefined') {
function1();
}
else {
setTimeout(fireWhenReady, 100);
}
}
$(document).ready(fireWhenReady);
</script>
...mais vous ne devriez pas avoir à le faire si l'ordre de vos balises script est correct.
Mise à jour : Vous pouvez obtenir des notifications de chargement pour script
des éléments que vous ajoutez à la page de manière dynamique si vous le souhaitez. Pour obtenir une large prise en charge par les navigateurs, vous devez faire deux choses différentes, mais en tant que technique combinée, cela fonctionne :
function loadScript(path, callback) {
var done = false;
var scr = document.createElement('script');
scr.onload = handleLoad;
scr.onreadystatechange = handleReadyStateChange;
scr.onerror = handleError;
scr.src = path;
document.body.appendChild(scr);
function handleLoad() {
if (!done) {
done = true;
callback(path, "ok");
}
}
function handleReadyStateChange() {
var state;
if (!done) {
state = scr.readyState;
if (state === "complete") {
handleLoad();
}
}
}
function handleError() {
if (!done) {
done = true;
callback(path, "error");
}
}
}
D'après mon expérience, la notification d'erreur ( onerror
) n'est pas fiable à 100 % sur tous les navigateurs. Notez également que certains navigateurs utilisent les deux mécanismes, d'où l'utilisation de l'option done
pour éviter les notifications en double.