[HTML/CSS/Javascript] conflit body onload / window.onload

conflit body onload / window.onload [HTML/CSS/Javascript] - HTML/CSS - Programmation

Marsh Posté le 08-06-2007 à 15:19:43    

Bonjour
 
je bute actuellement sur un problème de javascript.
 
j'ai un fichier HTML qui est crée par ASP compilé dont je n'ai pas les sources.
je ne peux donc pas toucher à ce fichier HTML.
 
je souhaite cependant modifier le contenu de cette page, je choisis donc le seul point d'entrée que j'ai : javascript.
 
en effet, le fichier html fait appel à un fichier javascript dont j'ai les sources.
ce fichier javascript est appelé au début du fichier HTML, avant le BODY, donc avant un quelconque contenu.
je ne peux donc pas modifier le contenu au moment exact de l'appel à javascript, puisque à ce moment là, le fichier html est vide.
 
j'ai donc essayé de faire éxecuter le javascript après le chargement, grâce à window.onload.
 
Le problème, c'est que le fichier html inclue un body onload="blablabla" qui d'une part m'est inaccessible, et d'autre part est variable.
 
ci dessous un résumé en code de mon problème :  
 
fichier html que je ne peux pas modifier :

Code :
  1. <html>
  2. <head>
  3. <script type="text/javascript" src="./simple.js"></script>
  4. </head>
  5. <body onload="alert('truc');">
  6. <h1>test</h1>
  7. <p id="toto">paragraphe original</p>
  8. <p>Un deuxième paragraphe</p>
  9. </body>
  10. </html>


 
ci-dessous le fichier "simple.js" que je peux modifier :

Code :
  1. function replacetext()
  2. {
  3. document.getElementById('toto').firstChild.data="nouveau paragraphe";
  4. }
  5. window.onload=replacetext;


 
le problème est le suivant : le window.onload du fichier javascript n'est pas éxécuté, à cause du body.onload (que je ne peux pas modifier ni enlever)
 
la seule parade que j'ai trouvé jusqu'à présent est de faire :  

Code :
  1. window.setTimeout("replacetext",1000);


 
qui marche, mais qui n'est pas très propre et très peu adapté, dans la mesure où ma page peut être longue à charger.
 
toutes les solutions que j'ai trouvées sur internet disent de modifier le body onload, ce que je ne peux pas.
 
est-ce que quelqu'un a déjà rencontré ce problème ou peut m'aider ?
 
 
merci
 
:jap:


Message édité par nabbo le 08-06-2007 à 16:07:38
Reply

Marsh Posté le 08-06-2007 à 15:19:43   

Reply

Marsh Posté le 08-06-2007 à 16:14:17    

aller, je me réponds... :D
 
il faut utiliser les gestionnaires d'évênements :
 
fichier simple.js :

Code :
  1. function replacetext()
  2. {
  3.     document.getElementById('toto').firstChild.data="nouveau paragraphe";
  4. }
  5. //setup onload function
  6. if(typeof window.addEventListener != 'undefined') //.. gecko, safari, konqueror and standard
  7. window.addEventListener('load', replacetext, false);
  8. else if(typeof document.addEventListener != 'undefined') //.. opera 7
  9. document.addEventListener('load', replacetext, false);
  10. else if(typeof window.attachEvent != 'undefined') //.. win/ie
  11. window.attachEvent('onload', replacetext);
  12. else //** remove this condition to degrade older browsers : mac/ie5 and anything else that gets this far
  13. {
  14. if(typeof window.onload == 'function') //if there's an existing onload function
  15. {
  16.  var existing = onload;
  17.  window.onload = function()  //add new onload handler
  18.  {
  19.   existing(); //call existing onload function
  20.   replacetext();  //call replacetext onload function
  21.  };
  22. }
  23. else  //setup onload function
  24.  window.onload = replacetext;
  25. }


 
merci à la source : http://www.brothercake.com/site/re [...] ts/onload/
 
:jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed