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 :

Cette page est-elle déjà ouverte dans mon navigateur ?


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Cette page est-elle déjà ouverte dans mon navigateur ?
    Bonjour

    Je cherche, en javascript, un objet qui contiendrait la listes des pages et onglets ouverts par un navigateur, éventuellement par ses différentes instances.

    Pourquoi ?

    J'ai développé une interface de saisie-web utilisant une sauvegarde locale dans le "localStorage" initialisée à l'ouverture de la page, grâce à l'interrogation d'une base mySql par htmlHttpRequest(Ajax).

    Souci : un des utilisateurs qui avait commencé puis interrompu quelque temps une saisie, a par erreur, ré-ouvert cette interface de saisie dans un nouvel onglet(ce qui a réinitialisé le localStorage) en croyant reprendre sa saisie en cours ... puis sans s'en apercevoir est revenu au 1er onglet qui avait gardé l'affichage qu'il avait lorsque l'utilisateur l'avait abandonné mais qui avait "en fond" les données réinitialisées par le 2ème onglet.
    Je vous laisse imaginer son incompréhension devant le comportement erratique de son interface de saisie.

    En conséquence, je souhaiterais savoir si le navigateur comporte déjà, parmi ses différentes instances, un onglet(ou fenêtre) identique à celui/celle que je suis en train d'ouvrir.
    Ceci pour :
    - ne pas réinitialiser le travail déjà commencé
    - signaler à l'utilisateur de rechercher un autre onglet/fenêtre en cours de saisie
    - lui conseiller de refermer ce 2ème onglet/fenêtre

    Cordialement

    _Rainbow

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Je pense que tu va au trop compliqué dans le choix de la techno JS pour gérer ce type de problème.
    Si tu souhaite faire ça il y aura du JS mais seulement au niveau du la page cliente voit plutôt sur la manière de gérer la non possibilité de chargé deux fois la page et de redirigé le client sur un page qui lui indique qu'il a déjà un onglet ou une page dont la session : soit en utilisant
    s'est la même chose qu'un localStorage mais pour les session puis tu check si le client ne déclenche pas s'est deux événements en JS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    window.addEventListener("blur", function() { 
        console.log("perte du focus de la page"); 
    //ici tu enregistre les derniers changement du formulaire 
    //cookies sessionStorage localStorage
    }, true);
    window.addEventListener("focus", function() { 
         console.log("de retour sur la page");
     
    }, true);
    Sinon plus simple, côté serveur ou tu gère les sessions, tu aura la possibilité de checker si le client côté IP, unique session côté serveur te permettra de redirigé sur une page dans lequel tu affichera ton formulaire en cas (sans page doublon) auquel cas (redirection sur page explicative de l'erreur...)
    J'espère avoir été clair, bonne chance.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour

    Il est exact qu'on peut vérifier au niveau du serveur le n° IP et le navigateur.
    Je peux donc vérifier qu'un utilisateur ( ou un collègue) reprend la saisie sur un autre PC sans avoir fermé la session sur le PC où la saisie avait été commencée.
    Je peux aussi vérifier qu'une 2ème saisie est ouverte sur un même PC mais avec un autre navigateur.
    Si la saisie est ouverte deux fois sur un même PC avec le même navigateur, je suis obligé de vérifier au niveaux du navigateur.

    Merci pour ta réponse
    _Rainbow

  4. #4
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    déjà coté serveur, génère une "clé" par page chargée, ainsi si tu recois des données ajax, tu sais de quelle page elle provient.

    coté client, si tu utilises déjà localStorage, rien de plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //window.onload = function(){
      if(localStorage.pageOpen){
        alert('attention, la page semble déjà ouverte!');
      }
      localStorage.pageOpen = true;
    //};
    window.onbeforeunload = function(){
      delete localStorage.pageOpen;
    };
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour

    Il me semble pas que lors des échanges initiaux le serveur ait des information complètes sur la pages dans le navigateur.
    en revanche, ton idée d'utiliser le Localstorage m'a permis de résoudre mon problème comme ci-dessous.
    J'utilise une variable localStorage['urlSansDouble'] ainsi qu'une variable localStorage['nbPagesOuvertes'].
    Au chargement de la page, grâce à window.onload je vérifie la valeur de urlSansDouble, si elle est vide je la remplis et je met le nombre de page à 1, sinon je fais un message d'alerte et j'incrément le nombre de pages.
    A la fermeture de la page, grâce à window.onbeforeunload, je décrémente le nombre de pages et quand se nombre est à zéro, je vide la variable urlSansDouble.

    Comme ceci

    Code : 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
    /** Vérifier la réouverture d'une page qui ne doit être ouverte qu'une seule fois
     * 	On utilise ici une variable window.localStorage['urlSansDouble']
     */
     
    /** url complete de ma page mais sans lien interne à la page */
    var pageOuverte = window.location.href;
    var p = pageOuverte.indexOf("#");
    if (p>-1) { pageOuverte = pageOuverte.slice(0,p);}
     
    /** vérification d'une éventuelle double ouverture */
    function verifierSiMaPageEstOuverteDeuxFois() {
    	var urlSansDouble = (!((window.localStorage.getItem('urlSansDouble')=="")||(window.localStorage.getItem('urlSansDouble')==null))) ? window.localStorage.getItem('urlSansDouble') : "";
    	if (urlSansDouble == "") {
    		window.localStorage.setItem('urlSansDouble',pageOuverte);
    		window.localStorage.setItem('nbPagesOuvertes',1);
    	}
    	else {
    		window.localStorage.setItem('nbPagesOuvertes',parseInt(window.localStorage.getItem('nbPagesOuvertes'))+1);
    		alert("ATTENTION !!!"+"\n\n"+"La page "+pageOuverte+" est déjà ouverte dans votre navigateur !"+"\n"+"Veuillez refermée la dernière page que vous venez d'ouvrir"); 
    	}
    }
     
    /** S'exécute dès que la page est complètement affichée */
    window.onload = function() {
    	verifierSiMaPageEstOuverteDeuxFois();
    }
     
    /** S'execute à la fermeture de la page */
    window.onbeforeunload = function() {
    	window.localStorage.setItem('nbPagesOuvertes',parseInt(window.localStorage.getItem('nbPagesOuvertes'))-1);
    	if (parseInt(window.localStorage.getItem('nbPagesOuvertes')) <1 ) {
    		window.localStorage.setItem('urlSansDouble',"");
    	}
    }

    Merci pour ton idée
    _Rainbow

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Rebonjour

    Dans mon javascript ci-dessus, je n'ai pas vérifié la variable pageOuverte définie au tout début car je ne surveille qu'une seule page sur le site.
    Si je vérifiait plusieurs pages distinctes d'un même site à ne pas ouvrir en double, je devrais l'utiliser avec un algorithme un peu plus évolué.

    _Rainbow

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. cette requette est elle possible?
    Par domino_dj dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/03/2007, 11h08
  2. [Express Edition (gratuit)] Cette version est elle suffisante ?
    Par dymezac dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/09/2006, 16h36
  3. cette requête est-elle correcte?
    Par spilliaert dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/02/2006, 22h33
  4. Cette requête est-elle valide?
    Par FrankOVD dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/01/2006, 19h21
  5. Réponses: 1
    Dernier message: 21/02/2005, 12h40

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