IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Fermer les autres onglets du navigateur


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 46
    Par défaut Fermer les autres onglets du navigateur
    Bonjour.

    Sous Internet Explorer 11, l'option "Fermer les autres onglets" permet de fermer tous les onglets inactifs sauf l'onglet actuellement ouvert et actif.

    Comment faire la meme chose en JavaScript?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    On ne peut pas, ce n'est pas dans le bac à sable de JS.
    Tu ne peux fermer les autres onglets que si les fenêtres ont un lien de parenté (window.open) ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 46
    Par défaut
    Bonjour.

    Faut-il associer à chacune des pages une sorte d'identificateur ?
    Comment faire en JavaScript (ou en PHP), pour vérifier si chacune de nos pages ait actuellement ouverte ou non dans un onglet dans du navigateur ?

    Merci.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 46
    Par défaut
    Bonjour.

    Lorsque j'essaye le code suivant
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var fenetreOuverte;
    function ouvrirFenetre()
    {
      fenetreOuverte = window.open('http://www.developpez.net/');
    }
    function fermerFenetreOuverte()
    {
      fenetreOuverte.close();
    }
    Cela ne marche pas. La reference "fenetreOuverte" est toujours indéfinie.

    Comment faire?

    Merci.

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    maFenetre = windows.open('monurl');
    if (maFenetre) {
      maFenetre.close();
    }
    toutes les autres fenêtre ou autres onglets n'appartiennent pas à ton appli donc INTERDIT de le fermer.
    le navigateur ne t'en donnera pas l'accès.

    C'est l'utilisateur qui choisi d'ouvrir ou de fermer des site/application dans son navigateur
    ce n'est pas le développeur d'une quelconque application de faire intrusion dans ces choix.

    de façon générale le navigateur est le navigateur du client c'est lui qui doit rester maitre à bord.
    le document est le document de l'application c'est à elle de décider ce qu'il doit contenir et comment il doit agir.

    Chacun chez soit et on aura moins de m@rd# de piratage.

    A+JYT

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 46
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (maFenetre) {
      maFenetre.close();
    }
    La condition est toujours fausse puisque maFenetre est indéfinie.

    Est-ce possible d'utiliser des variables de session?

    Merci.

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Bah c'est normal, si tu ouvres la fenêtre dans l'onglet courant, tu perds le contexte.
    Quant aux sessions, elles n'existent pas à proprement parler en JavaScript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var maFenetre = window.open('http://www.developpez.net/', '_blank');
    setTimeout(function(){
        maFenetre.close();
    }, 2000);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 46
    Par défaut
    Bonjour.

    Même en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var maFenetre = window.open('http://www.developpez.net/', '_blank');
    La fonction maFenetre.close(); ne fonctionne pas.

    Dans les faits, l'objectif de mon problème est le suivant:
    -L'utilisateur se connecte au site via un login et un mot de passe
    -Tant qu'il est connecté il peut ouvrir plusieurs pages dans différents onglets du navigateur (par exemple la page des articles du site, la page des vidéos du site, etc...)
    -Mais une fois que l'utilisateur se déconnecte du site, les autres pages encore ouverte du site ne devraient plus pouvoir réagir aux actions de l'utilisateur

    C'est un problème similaire au fait de pouvoir poster des messages sur un forum tant qu'on est connecté, mais dès qu'on se déconnecte du forum depuis une autre page ouverte d'un autre onglet où on était connecté, les autres pages des autres onglets du forum où on était connecté ne nous permettent plus de poster des messages étant donné que notre déconnexion s'est effectué depuis une autre page d'un autre onglet.

    Comment faire ?

    Merci.

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    C'est que tu dois mal l'utiliser...

    http://jsfiddle.net/8f87cf0f/
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 46
    Par défaut
    Voici mon code HTML:
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ul class="test">
    <li class="openchoix" onclick="Start_Choix()";=""><a href="#" class="testautre">Lancer fonction</a></li>
    </ul>

    Voici ma fonction JavaScript "Start_Choix()" :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function Start_Choix(){
    var Tool ='No choice';
    <?php
    foreach($Liste as $key => $value){
            if($test["Profil"]=='chef' and ($key>3 and $key<10)){
            echo 'var Tool'.$key.' = document.getElementById("ChxLabel'.$key.'").checked;'."\r\n";
    echo 'if (Tool'.$key.'===true) Tool=document.getElementById("ChxLabel'.$key.'").value;'."\r\n";
                    }
                            if($test["Profil"]=='employe' and $key==12){
                    echo 'var Tool'.$key.' = document.getElementById("ChxLabel'.$key.'").checked;'."\r\n";
    echo 'if (Tool'.$key.'===true) Tool=document.getElementById("ChxLabel'.$key.'").value;'."\r\n";
            }
    }       
            ?>
    var fenetre;
    if(Tool=='liste première')
    fenetre = window.open('http://www.developpez.net/', '_blank');
    else
    if(Tool=='liste seconde'){
    if(fenetre){fenetre.close();}}
    }

    Quand je clique sur "Lancer function" en ayant choisi 'liste première', la page 'http://www.developpez.net/ s'ouvre bien dans un nouvel onglet.
    Mais après, quand je clique sur "Lancer function" en ayant choisi 'liste seconde', rien ne se passé, la page 'http://www.developpez.net/ ne se ferme pas.

    Comment faire?

    Merci.

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ton code HTML n'est pas correct.

    Que vient faire du code PHP dans le script ?
    JavaScript (et le navigateur) n'interprète pas le PHP, ce qui nous intéresse, c'est uniquement le code JavaScript généré et exécuté.

    Important : Les règles incontournables d'utilisation de ce forum.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  12. #12
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 101
    Par défaut
    Citation Envoyé par Robjerey Voir le message
    Dans les faits, l'objectif de mon problème est le suivant:
    -L'utilisateur se connecte au site via un login et un mot de passe
    -Tant qu'il est connecté il peut ouvrir plusieurs pages dans différents onglets du navigateur (par exemple la page des articles du site, la page des vidéos du site, etc...)
    -Mais une fois que l'utilisateur se déconnecte du site, les autres pages encore ouverte du site ne devraient plus pouvoir réagir aux actions de l'utilisateur

    C'est un problème similaire au fait de pouvoir poster des messages sur un forum tant qu'on est connecté, mais dès qu'on se déconnecte du forum depuis une autre page ouverte d'un autre onglet où on était connecté, les autres pages des autres onglets du forum où on était connecté ne nous permettent plus de poster des messages étant donné que notre déconnexion s'est effectué depuis une autre page d'un autre onglet.

    Comment faire ?

    Merci.
    Ce que tu cherches à faire c'est une authentification côté serveur.

    Ouvrir plusieurs onglets est un moyen de détourner l'usage prévu d'une application, car en utilisant un autre onglet on « s'échappe » du scénario normal de navigation dans une seule page. Comme tu l'as constaté, ça permet à l'utilisateur de faire des actions à des moments où il ne devrait pas pouvoir, par exemple poster un message alors qu'il est déconnecté.

    Comme SpaceFrog et Sekaijin te l'ont dit, tu n'as aucun contrôle sur les onglets de l'utilisateur. Tu dois donc utiliser un mécanisme de protection côté serveur. Et ce mécanisme, c'est simplement les sessions.

    Documente-toi sur les sessions PHP, essaye de mettre en œuvre une authentification basique, et si tu n'y arrive pas, ouvre un sujet dans le forum PHP

    Une remarque importante à propos de ton code JavaScript : c'est une mauvaise idée de le faire générer par PHP. Ça le rend difficile à lire, et difficile à déboguer car on ne peut pas vraiment savoir si une erreur vient du code PHP ou du code JS. Limite au maximum le couplage entre PHP et JS en passant juste les informations essentielles.

    Par exemple si je reprends ton code :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <script>
    "use strict";
     
    // =========== passage d'info PHP -> JS =============
    var profil = "<?php echo $test['Profil']; ?>";
    // =========== /passage d'info PHP -> JS ============
     
    var fenetre;
    function Start_Choix() {
       var Tool = 'No choice';
     
       /* <?php
          # foreach ($Liste as $key => $value) {
          #    if ($test['Profil'] === 'chef' and $key > 3 and $key < 10) {
          #       echo "var Tool$key = document.getElementById('ChxLabel$key').checked;\n";
          #       echo "if (Tool$key) Tool = document.getElementById('ChxLabel$key').value;\n";
          #    }
          #    if ($test['Profil'] === 'employe' and $key === 12) {
          #       echo "var Tool$key = document.getElementById('ChxLabel$key').checked;\n";
          #       echo "if (Tool$key) Tool = document.getElementById('ChxLabel$key').value;\n";
          #    }
          # }
       ?> */
     
       var label;
       if (profil === 'chef') {
          for (var key = 4; key < 10; key++) {
             label = document.getElementById('ChxLabel' + key);
             if (label.checked) Tool = label.value;
          }
       }
       if (profil === 'employe') {
          label = document.getElementById('ChxLabel12'); // key = 12
          if (label.checked) Tool = label.value;
       }
     
       if (Tool === 'liste première') {
          fenetre = window.open('http://www.developpez.net/', '_blank');
       } else if (Tool === 'liste seconde') {
          if (fenetre) fenetre.close();
       }
    }
     
    </script>
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/07/2014, 15h43
  2. Réponses: 6
    Dernier message: 27/05/2014, 21h59
  3. Réponses: 6
    Dernier message: 03/01/2014, 12h43
  4. Rafraichir une page dans un autre onglet du navigateur
    Par pierre50 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/10/2012, 17h10
  5. Fermer les div déjà ouvertes lors de l'ouverture d'une autre
    Par JackBeauregard dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/05/2007, 00h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo