Problème boucle for + popup

Résolu
bonjour, je me trouve en ce moment devant un problème en javascript que je ne comprend absolument pas:
je voudrais que lorsqu'on clique sur un bouton, une popup s'ouvre puis se ferme 5 secondes plus tard, et cela 3 fois de suite. voici ce que j'ai écrit:
function popup()
{
	for (vble = 0; vble < 3; vble++)
	{
	test = window.open("http://www.google.fr");
	window.setTimeout("test.close()",5000);
	}
}


mais je au lieu de ça, il m'ouvre les 3 popup de suite, puis me ferme la troisième après 5 sec; un peu comme si il n'exécutait la 2eme instruction qu'après avoir exécuté 3 fois la première (si vous voyez ce que je veux dire). et si j'enlève la boucle for ou si je fixe la condition à
vble < 1
tout fonctionne parfaitement.
j'ai cherché pendant 2 heures sur le web sans rien trouver T_T alors je voudrais au moins avoir vos avis sur la question...

merci d'avance de vos réponses!

--
Les murs n'ont qu'une fonction: être franchis

5 réponses

  1. Voilà, pas besoin d'array en fait :

    var a;
    var i = 0;
    function ouvrir() {
    if(i<3) {
    a = window.open('http://example.com');
    window.setTimeout(fermer,5000);
    i++;
    }
    }
    function fermer() {
    a.close();
    window.setTimeout(ouvrir,1000);
    }
    ouvrir();
    http://jsfiddle.net/qn2vpbor/1/

    ___/\_canarder_/\___
    ~Waterfox|Palemoon~
    1
    1. Les pop-ups c'est dépassé, utilise un bloc flottant (avec une iframe ou ajax).
      0
      1. bonjour canarder,
        merci pour ta réponse (même si elle ne répond pas vraiment au problème), mais après avoir des recherches et beaucoup d'essais avec iframe, je me suis retrouvé devant le problème des X-frame-options. Tu as du certainement en entendre parler, c'est en gros une protection des sites pour qu'il ne soient pas affichés dans des frame justement (c'était à la base pour éviter les hacks), et le problème c'est que j'ai précisément besoin de les afficher. donc je suis bloqué, as-tu une solution?
        0
        1. Ah dans ce cas, pas vraiment, je ne comprend pas exactement ce que tu veux faire. Tu ne peux pas agir sur un élément d'un autre domaine en javascirpt.
          0
        2. Ah ok je viens de comprendre le problème. Il te faut un nom de variable différent pour chaque fenêtre !
          Peut-être que tu peux utiliser ça : https://www.w3schools.com/js/js_arrays.asp
          Un setTimeout ne bloque pas l'exécution du script.
          0
        3. je ne cherche pas à agir sur les éléments du site, je cherche simplement à l'ouvrir dans une autre fenêtre/onglet/frame. en l'occurence même sans JS ce n'est plus possible de le faire dans des frames (à cause de la protection X-frame). par contre excuse moi mais je ne comprend pas très bien ce que tu entend par "un nom de variable différend pour chaque fenêtre", comment faire pour changer le nom d'une variable dans une boucle? (la valeur c'est logique, mais le nom...)
          0
        4. bah justement, pour ça que je t'ai donné un lien.
          0
        5. ah ok, le lien ne s'était pas affiché ^^ je regarde ça tt de suite
          0
      2. Ok merci ça marche parfaitement! d'ailleur le setTimeout dans la fonction fermer n'est pas nécessaire non plus. ça montre bien du coup que le problème venait de la boucle for; c'est frustrant de ne pas pouvoir l'utiliser, ça simplifierait grandement le code >_<
        0
        1. C'est tout simplement parce que setTimeout() ne stoppe pas le script.
          0
          1. yop, ça parait logique. bon sujet résolu donc.
            0