Atteindre une variable d'une fenetre fille à partir de la mere [Résolu]

Signaler
Messages postés
48
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
24 avril 2008
-
Messages postés
48
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
24 avril 2008
-
Voila mon probleme qui m'a pris la tête toute la journée!
J'ai une fenetre (f1) ouvrant une popup (f2), elle même ouvrant une popup (f3)
Quand f3 a fini son traitement, elle ferme f2, il me reste donc f1 et f3.
Avant de fermer f3, je veux rafraichir f1 qui est sa fenetre "grand mère".
Comme cela n'est pas possible nativement, j'ai fait ceci:

<code>
//dans f2
var popup_bdc=window.open('validation2_adsl.php?num_command=".$num_command."&parent=window.opener.parent','print_command','width=255,height=150,titlebar=no,resizable=yes,scrollbars=no,left=300, top=300, status=no,toolbar=no');
popup_bdc.mere=window.opener.parent;

//dans f3
var mere;

Je devrais donc avoir mon objet correspondant à f1 dans 'mere', ce qui me permettrait de faire mere.close()

mais dans mere j'ai un magnifique 'Undefined'

D'avance merci!

12 réponses

Messages postés
48
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
24 avril 2008

Ben j'ai fait ça:

//dans f2
setTimeout('memoriserMere();',1000);
setTimeout('window.close();',1100);

Comme ca il définit la variable dans f3 en attendant qu'elle soit bien crée puis se ferme.

Je te remercie beaucoup bultez pour tes réponses de qualité et fulgurantes!

Bonne prog!
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
32
Salut,

Une autre solution est de faire faire des faux fenêtre popup et la plus de problème car c'est des div, elles sont dragabble et peuvent communiquer entre elles.
Pour des exemples, recherche sur internet popup

Exemples
http://css.alsacreations.com/Accessibilite-du-Web/Faire-apparaitre-des-popups-sans-nouvelle-fenetre

Apres dans des librairies comme yahoo, microsoft ajax, ....
tu as d'autres exmples.

Bon courage
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
Bonjour,

    nhervagault a parfaitement raison, surtout que de plus en plus de personnes refusent les pop-up
       même si j'eusse préféré qu'il cite JavsScriptFR.com comme source de recherche
       ( de mémoire, peut-être me trompe-je ? PetOleTeam a du faire quelque chose là-dessus,
          sinon, une petite recherche ?  )

    pour répondre quand même ( je pense qu'on en avait déjà causé sur ce forum ) :

==========================================================
<HTML><HEAD><TITLE>f1 : la grand mère</TITLE></HEAD>

<script type="text/javascript">
function cre()
{
    window.open("f2.htm","","");
}
</script>

</HTML>
==========================================================
<HTML><HEAD><TITLE>f2 : la fille</TITLE></HEAD>

<script type="text/javascript">
var pop;
function mem()
{
    pop.mere=window.opener;
}
function cre()
{
    pop=window.open("f3.htm","","");
    setTimeout("mem();",1000); 
}
</script>

</HTML>
==========================================================
<HTML><HEAD><TITLE>f3 : la petite fille</TITLE></HEAD>

<script type="text/javascript">
var mere;
function mem()
{
    eval(mere.txt.value="'exemple'"); 
}
</script>

</HTML>
==========================================================


doit y avoir d'autres solutions...



<hr />                Cordialement            Bul        
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
bon... là c'est la petite fille qui cause à sa grand'mère...
"à adapter" pour que la mémé sache où est sa petite fille.
ça se joue chez la fille, qui connait sa mère (window.opener) et la petite-fille (pop)
<hr />            Cordialement       Bul    
Messages postés
48
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
24 avril 2008

merci les gars, j'avais trouvé ta source bultez, mais le truc que j'ai pas compris c'est le eval() sur la petite fille.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
32
Salut

Eval est utilisé pour gérer des variables comme des objet.

Ou le contenu est interprété comme du code javascript

Exemple:
http://fr.selfhtml.org/javascript/objets/independant.htm#eval

Dans notre cas
mere.txt.value="'exemple'"

donnera window.opener.txt.value = 'Exemple'

voila
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
précisons simplement que le window.opener c'est celui de la page f2, c'est à
dire f1, par celui de f3 qui serait f2. ( j'espère avoir bien embrouillé là ).
<hr />


                Cordialement          Bul        
Messages postés
48
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
24 avril 2008

Encore merci bultez. J'ai réussi à bidouiller un peu.

Un problème subsiste :

//dans f2
var pop_bdc;
function memoriserMere()
{
        popup_bdc.mere=window.opener;
}
function valider_cmde()
{
        popup_bdc=window.open('validation2_adsl.php?num_command=<? echo $num_command ?>','print_command','width=255,height=150,titlebar=no,resizable=yes,scrollbars=no,left=300, top=300,         status=no,toolbar=no');
setTimeout('memoriserMere();',1000);
//window.close()                                       <----------- problème
}

//dans f3
var mere;
setTimeout('this.opener=mere;',1000);

puis après traitement:

window.opener.location.reload();self.close()

C'est bien f1 qui est rafraichit et mon popup se ferme bien. Le problème est que je ne peut plus fermer f2 une fois arrivé sur f3 car
son opener est devenu f1. Il faudrait que je ferme f2 une fois le traitement de f3 terminé.

J'ai pensé à : ne pas faire this.opener=mere;
et faire à la place mere.location.reload(); window.opener.close(); self.close();

Mais dans f3 il y a un formulaire à valider, du coup lorsqu'on valide je perd ma variable 'mere' définie au load

Comment faire ???? Je continue à chercher mais si quelqu'un a une idée, je suis preneur!
J'espère que tu m'a compris
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
>>Il faudrait que je ferme f2 une fois le traitement de f3 terminé.
        pas de souci particulier...

>>son opener est devenu f1
        ben non ???

======================================
<HTML><HEAD><TITLE>f1 : la grand mère</TITLE></HEAD>

<script type="text/javascript">
var d=new Date();
document.write(d);   // pour contrôler que le rafraîchissement est bien fait
function cre()
{
    window.open("f2.htm","","");
}
</script>

</HTML>
======================================
<HTML><HEAD><TITLE>f2 : la fille</TITLE></HEAD>

<script type="text/javascript">
var pop;
function mem()
{
    pop.mere=window.opener;
}
function cre()
{
    pop=window.open("f3.htm","","");
    setTimeout("mem();",1000);
}
</script>

</HTML>
======================================
<HTML><HEAD><TITLE>f3 : la petite fille</TITLE></HEAD>

<script type="text/javascript">
var mere;
function mem()
{
    eval(mere.location.reload()); // pour l'exemple j'ai mis le rafaîchissement (f1)
    window.opener.close();        // et la fermeture (f2) dans le même traitement
}
</script>

</HTML>
======================================






<hr />                                Cordialement                Bul        
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
et si autres problèmes.. on peut appeler une fonction
    dans une autre page, qui ferait le boulot, par exemple.
<hr />            Cordialement          Bul        
Messages postés
48
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
24 avril 2008

oui mais le problème comme ca est que : lorsque sur la petite fille (f3) on valide le formulaire, on perd la variable mère.
Je ne peux donc plus l'utiliser.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
>>lorsque sur la petite fille (f3) on valide le formulaire...
parce que le formulaire redirige ailleurs ou recharge la page ou ... je ne sais quoi
donc, return false, ou méméoriser dans un cookies ou ... je ne sais quoi



<hr />



Cordialement            Bul