Bonjour à tous
Le problème est simple : un script en Javascript ouvre une fenêtre à l'aide de window.open(), puis vient à l'aide d'autres fonctions modifier des données dans la window fraichement ouverte (il remplit automatiquement le formulaire qui s'y trouve).
Si je fais w=window.open(...) et que juste ensuite, j'écris w.document.formulaire.champ.value = "...", j'obtiens une jolie erreur, en effet, le document n'est pas encore chargé, ce qui fait que le noeud value n'existe pas encore pour le code Javascript. Il faut donc que j'attende que la page w soit entièrement chargée. (Ah, la contrainte, c'est que je ne peux pas utiliser le onLoad de la page que j'ouvre).
Comme parade, j'utilise le code suivant :
while(ok == 0)
{
try
{
// On essaye d'assigner la valeur
// On emploie id.document.getElementById(terme).value
id.document.getElementById(terme).value = valeur ;
}
ok = 1 ;
catch(e)
{
// Si ca ne marche pas on incrémente un compteur
essai++ ;
}
}
Méthode qui fonctionne mais pose parfois problème (le try/catch monopolise tout le processeur, qui n'a pas le temps de charger la page w...)
Je n'ai pas abandonné là, quand même, et j'ai essayé d'utiliser setTimeout, sans succès :
("charge" est un input hidden situé sur la page qui éxécute ce code javascript)
function debut_chargement()
{
window.document.forms['formulaire'].charge.value = 0 ;
}
function etat_chargement()
{
return window.document.forms['formulaire'].charge.value ;
}
function fin_chargement()
{
window.document.forms['formulaire'].charge.value = 1 ;
}
function ouvre_fenetre(id,fenetre)
{
w=window.open(fenetre,id) ;
debut_chargement() ;
// Avant de finir la fonction, on attend quelques secondes
timer = setTimeout("fin_chargement()",2500) ;
a = etat_chargement() ;
while(a == 0)
{
a = etat_chargement() ;
}
// On retourne l'identifiant de la fenêtre
//afin d'y accéder par la suite
return w ;
}
La blague, c'est que la fonction fin_chargement() n'est jamais apellée par setTimeout (j'ai essayé d'y mettre des alert() pour etre sur et j'en suis sur). J'ai jamais compris pourquoi d'ailleurs.
Est ce que vous auriez d'autres idées pour controller que le chargement de la page est terminé ?
Merci d'avance.