2010-01-25 7 views
0

Je rencontre des problèmes avec JavaScript avant que la page ne soit complètement rendue dans IE 6 (peut-être d'autres versions, mais juste tester IE6 pour l'instant.) Firefox semble être OK). Je peux contourner ce problème en appelant les js sur window.onload comme ceci:Javascript Exécuter Après Page Render IE6

window.onload = function(){doIt();} 

Cependant, ma préoccupation est le fait que je vais écraser tout ce qui peut déjà être en window.onload. Le code sera utilisé dans le cadre d'une bibliothèque, donc je ne peux pas garantir que window.onload ne sera pas défini ailleurs par quelqu'un d'autre. Je préférerais ajouter ma fonction à l'événement onload comme ceci:

window.onload += function(){doIt1();} 
window.onload += function(){doIt2();} 

Mais quand je le fais, que doit2() est appelée. Existe-t-il un moyen d'enregistrer un gestionnaire d'événements lorsque la page est entièrement rendue? Ma deuxième pensée serait de simplement mettre mon code dans une boucle de vérification pour m'assurer que tous mes objets existent avant de courir. Mais j'ai peur que cela pourrait bloquer le navigateur.

Juste pour quelques informations d'arrière-plan, mon code cache/montre des iFrames. Je sais que je peux utiliser l'attribut onload de l'iFrame, mais j'ai besoin que toutes les iFrames soient complètement chargées avant d'appeler le code.

Des idées de la communauté? Merci d'avance pour votre contribution.

Répondre

6

Utilisez cette fonction addLoadEvent générique ...

function addLoadEvent(func) { 
    if(typeof window.onload != 'function') 
    window.onload = func; 
    else { 
    var oldLoad = window.onload; 

    window.onload = function() { 
     if(oldLoad) oldLoad(); 
     func(); 
    } 
    } 
} 

Cette essentiellement les files d'attente des fonctions à exécuter. Il n'écrase jamais un gestionnaire précédemment assigné. Exemple d'utilisation ci-dessous ...

addLoadEvent(function() { alert("One!"); }); 

addLoadEvent(two); 
function two() { 
    alert("Two!"); 
} 

Je veux mentionner que les bibliothèques comme jQuery prendre soin des problèmes connus comme celui-ci pour vous.

+2

Réponse rapide! et à peu près ce que j'étais sur le point de mettre! Vous pouvez placer l'utilisation de l'échantillon dans un bloc de code pour plus de clarté. Il est à noter que cela ajoutera toujours la nouvelle fonction à la fin de la chaîne appelée. Cela peut simplement être changé en changeant l'ordre des appels 'func()' et 'oldload()' dans la deuxième partie, ou éventuellement en passant une deuxième variable à la fonction si elle doit être modifiable. – PeterJCLaw

+0

+1 Parfait! Merde, j'aime ce site! –

+0

Yay, cette réponse m'a mis plus de 10.000 rep :) –

Questions connexes