Fermeture de popup par la page parente [Résolu]

Signaler
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
-
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
-
Bonjour à tous et bonne année .

Mon problème est le suivant:
J'ai une page principale qui ouvre un popup. Lors de la fermeture de ce popup, j'exécute une fonction JS qui appartient à la page principale ( la page parente).

Le soucis c'est que si l'utilisateur vient à changer de page principale, tout simplement en navigant sur le site, alors forcément la fermeture de mon popup déclenchera une erreur.

Je voudrais donc savoir s'il existe une méthode permettant de retrouver les popups ouverts depuis la page principale, et également de pouvoir provoquer leurs fermeture, toujours depuis cette même page.

Voilà. J'espère avoir été clair

-- message approuvé par Jean-Claude Van Damme --

5 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
onbeforeunload, c'est juste avant (  ) onunload.
(  n'est-ce pas spécifique IE d'ailleurs ??? )

le close sur le pop-up déclenche on[before]unload ?

°appliquer la solution 1 de mon 1er message ( appel
   de la fonction et récupérer l'erreur : try/catch )
°mettre un délai avant de fermer la page mère ( beurk/bof ... )
°ou autre solution ?

la plupart des traitements sont "asynchrones" avec le javascript
il doit (???) pouvoir arriver que les pop-up ne soient pas
fermés avant que la page mère ne le soit.

je suppute... à contrôler/tester

<hr />
            Cordialement          Bul       [mon Site]    [M'écrire]
<hr />
on ne dit pas je suppute mais je suis péripatéticienne
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
Bonjour,
   pas très bien compris le souci.

   faut-il tester si la page mère existe ?
      : tester un objet de la page mère, récupérer l'erreur, style :
          var r;
          try      {
                       r=window.opener.document.objet de la page mère;
                    }
          catch(e) { 
                       r="fermée";
                     }
          alert(r);

   faut-il tester si les pop-up existent ?
      : résultat du window.open dans un array. style :
         var pop=new Array(); ...
         pop[xxx]=window.open(....
         ...if ( !pop[yyy].closed ) pop[xxx].close();
         
         xxx =pop.length, par exemple
         yyy = de 0 à pop.length-1, par exemple

<hr />
               Cordialement             Bul          [mon Site]    [M'écrire]
<hr />
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
1
En fait ce que je veux faire c'est pouvoir fermer tous les popups qui ont été ouverts par la page parente, dès que celle-ci doit être fermée ou change d'url.

Ta 2eme solution me semble être la plus intéressante. Je vais tester ça de suite.

Merci Bul!

-- message approuvé par Jean-Claude Van Damme --
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
1
J'ai testé ta solution marche bien. j'ai mis en place la fonction suivante:

// tableau stockant tous les popups ouvertsarrayPopupsOpened = new Array();

function autoClosePopups(){
    for( var cpt_popup =0; cpt_popup < arrayPopupsOpened.length; cpt_popup++)    {        if(!arrayPopupsOpened[cpt_popup].closed)        {            arrayPopupsOpened[cpt_popup].close();        }    }}
qui est appelée lors de la fermeture de ma page parente:

Mais je suis confronté à un autre problème:
Certains popups possèdent eux aussi un évènement onbeforeunload, dans lequel est appélée une fonction appartenant à la page parente (le cas que j'ai évoqué précedemment).

Exemple dans le body du popup:

Et là ça plante, le popup me sort une erreur JS: "Cet objet ne gère pas cette propriété ou cette méthode".
Comme si fctBidon(); n'existait plus, donc comme si la page parente avait déjà perdu son contenu.

Si c'est le cas alors je vois pas trop quelle solution je trouver... Mais dans ce cas je comprend pas trop le fonctionnement du onbeforeunload

-- message approuvé par Jean-Claude Van Damme --
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
1
Yepeeee!! Avec ta 1ere solution en complément ca marche impeccable.

J'ai enfin réussi à faire ce que je voulais. Merci encore.

-- message approuvé par Jean-Claude Van Damme --