Intervenir dans une fenêtre après l'avoir ouverte - problèmes de temps

Intervenir dans une fenêtre après l'avoir ouverte - problèmes de temps - HTML/CSS - Programmation

Marsh Posté le 27-01-2005 à 21:50:51    

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.
 

Reply

Marsh Posté le 27-01-2005 à 21:50:51   

Reply

Marsh Posté le 27-01-2005 à 22:45:13    

leoboy a écrit :

(Ah, la contrainte, c'est que je ne peux pas utiliser le onLoad de la page que j'ouvre).


 
Pourquoi ? c'eut été une piste interressante ...


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 28-01-2005 à 09:16:56    

Le seul moyen je pense, c'est, à partir du popup, signaler à l'opener qu'il est chargé...

Reply

Marsh Posté le 28-01-2005 à 11:28:37    

boulax a écrit :

Pourquoi ? c'eut été une piste interressante ...


 
Ce script vient en fait consulter plusieurs formulaires dispersés sur le web.
J'ouvre des fenêtres sur ces formulaires, je remplis les valeurs qui m'intéressent, et je fais un submit(). Certaines de ces pages, pour leur bon fonctionnement, utilisent déja le onload pour initialiser leur formulaire, etc...
Reste à savoir : si j'attache un évènement onLoad sur la page que j'ouvre (en utilisant w.onLoad = fonction()), ca supprime l'éventuel onLoad qui est déja présent sur la page originale, non ?
 
Léo.

Reply

Marsh Posté le 28-01-2005 à 12:50:06    

Si tu le fais comme ca oui, mais il y a un moyen d'ajouter une fonction a l'onLoad sans devoir effacer la presente.
Regarde du cote de addEvent (me semble que c'est ca).

Reply

Marsh Posté le 31-01-2005 à 12:58:34    

Cerel a écrit :

Si tu le fais comme ca oui, mais il y a un moyen d'ajouter une fonction a l'onLoad sans devoir effacer la presente.
Regarde du cote de addEvent (me semble que c'est ca).


 
Exact, ca le fait, merci.
Cependant, comme pour tout dév javascript, il y a forcément un truc qui ne convient pas... on peut ajouter des fonctions avec addEvent ou attachEvent mais on ne peut pas leur passer d'argument... super
 
En tout cas merci pour l'aide
 
Léo.

Reply

Marsh Posté le 31-01-2005 à 13:53:52    

Utilise une fonction annonyme ...
Du genre  

Code :
  1. addEvent("load", function { lafonctionaappeler('salut'); } );


(Attention je sais pas si la fonction addEvent a ca comme params :D)

Reply

Marsh Posté le 01-02-2005 à 00:00:34    

Cerel a écrit :

Utilise une fonction annonyme ...
Du genre  

Code :
  1. addEvent("load", function { lafonctionaappeler('salut'); } );


(Attention je sais pas si la fonction addEvent a ca comme params :D)


mmmmhhh ca ne marche pas, IE 6 (ma cible) râle en tout cas.
Mais c'était une bonne idée ..... merci en tout cas, j'avais oublié ce genre de trucs.
 
Léo.

Reply

Marsh Posté le 01-02-2005 à 01:07:22    

Il accepte pas la fonction annonyme ?? L'implementation de JS dans IE serait-elle encore plus desastreuse de ce que je pensais ??
 
T'arrive pas a avoir plus de details. Je sais qu'IE n'as pas de debugueur JS a la firefox, mais sait-on jamais.
 
Au pire si tu as MS Visual d'installe tu peux essayer de passer par son debuger. Des fois il donne plus de details que le bete message "Cette page contient des erreurs" que donne IE.
 
D'apres mes test IE acceptait les fonction annonymes, c'est pour cela que je suis etonne.
 
Edit :
Maintenant que je viens d'y penser, me semble que j'ai commis une petite faute, essaye comme ca :

Code :
  1. addEvent("load", function() { lafonctionaappeler('salut'); } );


 
J'ai rajoute les () qui manquaient :D. Et me semble que ca marche pas sans :D :D


Message édité par cerel le 01-02-2005 à 01:09:00
Reply

Marsh Posté le 01-02-2005 à 08:56:42    

Dans la MSDN, il n'y a nulle trace de la fonction "addEvent" apparemment :/

Reply

Marsh Posté le 01-02-2005 à 08:56:42   

Reply

Marsh Posté le 01-02-2005 à 09:40:54    

Cerel a écrit :

Il accepte pas la fonction annonyme ?? L'implementation de JS dans IE serait-elle encore plus desastreuse de ce que je pensais ??
 
T'arrive pas a avoir plus de details. Je sais qu'IE n'as pas de debugueur JS a la firefox, mais sait-on jamais.
 
Au pire si tu as MS Visual d'installe tu peux essayer de passer par son debuger. Des fois il donne plus de details que le bete message "Cette page contient des erreurs" que donne IE.
 
D'apres mes test IE acceptait les fonction annonymes, c'est pour cela que je suis etonne.
 
Edit :
Maintenant que je viens d'y penser, me semble que j'ai commis une petite faute, essaye comme ca :

Code :
  1. addEvent("load", function() { lafonctionaappeler('salut'); } );


 
J'ai rajoute les () qui manquaient :D. Et me semble que ca marche pas sans :D :D


 
Effectivement, ca passe bien mieux... !
 
Merci en tout cas. Ca me sauve.
(C'est quoi l'intrêt d'apeller une fonction si on peut pas lui passer des paramètres ? hein ? Dans 95% des cas, aucun... merci le Javascript)

Reply

Sujets relatifs:

Leave a Replay

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