Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1301 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°964084
leoboy
Posté le 27-01-2005 à 21:50:51  profilanswer
 

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.
 

mood
Publicité
Posté le 27-01-2005 à 21:50:51  profilanswer
 

n°964119
boulax
Inserer phrase hype en anglais
Posté le 27-01-2005 à 22:45:13  profilanswer
 

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.
n°964273
FlorentG
Posté le 28-01-2005 à 09:16:56  profilanswer
 

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

n°964505
leoboy
Posté le 28-01-2005 à 11:28:37  profilanswer
 

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.

n°964605
cerel
Posté le 28-01-2005 à 12:50:06  profilanswer
 

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).

n°966664
leoboy
Posté le 31-01-2005 à 12:58:34  profilanswer
 

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.

n°966706
cerel
Posté le 31-01-2005 à 13:53:52  profilanswer
 

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)

n°967739
leoboy
Posté le 01-02-2005 à 00:00:34  profilanswer
 

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.

n°967851
cerel
Posté le 01-02-2005 à 01:07:22  profilanswer
 

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
n°967908
FlorentG
Posté le 01-02-2005 à 08:56:42  profilanswer
 

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

mood
Publicité
Posté le 01-02-2005 à 08:56:42  profilanswer
 

n°967933
leoboy
Posté le 01-02-2005 à 09:40:54  profilanswer
 

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)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

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

 

Sujets relatifs
Désactiver le redimensionnement et la réduction d'une fenêtre [RESOLU]temps d'acces
Comment forcer l'ouverture d'une nouvelle fenêtre pour un pop-up[JMF] Analyse de video plus ou moins temps réel, faisable ?
[Résolu] Problèmes depuis reinstall PHPgestion de temps dans script AS
Qt et fenetre Doslogiciel de stat en temps réel ??
[BATCH] Suppression de fichier en fonction du tempsPrésentation fenêtre fixe
Plus de sujets relatifs à : Intervenir dans une fenêtre après l'avoir ouverte - problèmes de temps


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR