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 :

Distinguer le rafraîchissement de la fermeture d'une page avec onbeforeonload


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 6
    Points : 0
    Points
    0
    Par défaut Distinguer le rafraîchissement de la fermeture d'une page avec onbeforeonload
    salut

    j'ai un problème avec mon code javascript:
    j'ai développé un script qui affiche une alerte lorsqu'il détecte le fermeture du navigateur et ça marche mais il affiche le même alerte lors de rafraîchir mon page web et je veux pas ça

    voila mon code js :
    Code html : 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
    <html>
    <head>
    	<title></title>
    	<script type="text/javascript">
    function savePrompt() {
     
    // si unsavedData = true, message montré
    // si unsavedData = false, la navigation n'est pas interrompue
     
    var message = 'On passe';
    return message;
     
     
    }
     
    window.onbeforeunload = savePrompt;
    </script>
    </head>
    <body>
    	Page 1 : Have fun xD!!!
     
    	<a href="page2.html">test d'un lien</a>
    </body>
    </html>

    merci d'avance

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

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    rafraichir ça n'existe pas

    rafraîchir c'est fermer puis ouvrir la même page.
    A+JYT

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 6
    Points : 0
    Points
    0
    Par défaut pblme code js
    Salut,

    Je voudrais détecter le clic sur la croix de fermeture du navigateur pour appliquer un script. J'ai utilisé onbeforeonload et ça marche mais lorsque j'actualise le page web le même alerte apparait.
    Je ne veux pas voir cette alerte lorsque j'actualiser ma page web. Je veux la voir juste sur le clic de la croix de fermeture du navigateur.

    Code js :

    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
    <html>
    <head> 
    <script type="text/javascript">
     
    window.onbeforeunload = confirmExit;
     
     
     
    function confirmExit()
    { 
    	return 'Vous voulez fermer votre navigateur ?';
    }
    </script>
    </head> 
    <body>
    	fsdknvkmdjsnvlsflksfn,
    </body>
    </html>
    Merci d'avance.

  4. #4
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    JavaScript n'a accès qu'à l'environnement de la page, pas à celui du navigateur. Il est donc capable de savoir que tu quittes la page, mais en aucune manière la façon dont tu quittes la page.
    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

  5. #5
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Le gestionnaire d'évènement que tu utilises onbeforeunload est appelé chaque fois que la page va être déchargée.
    C'est à dire, si tu réactualises la page (F5), ou que tu navigues, au travers d'un lien, sur une autre page, ou que tu fermes l'onglet qui contient la page, ou que tu fermes le navigateur et donc l'onglet qui contient la page ...

    edit: oups, pas vu avant de poster. ce que dit bovino en plus concis:
    Citation Envoyé par Bovino Voir le message
    JavaScript n'a accès qu'à l'environnement de la page, pas à celui du navigateur. Il est donc capable de savoir que tu quittes la page, mais en aucune manière la façon dont tu quittes la page.
    Je n'ai pas de solution pour la réactualisation de la page.

    En ce qui concerne la navigation, tu peux essayer ça :

    - créer un page "maitre", celle qui va contenir ton code pour le test de déchargement de la page, et qui hébergera les autres pages ;
    - créer tes autres pages normalement, c'est à dire sans test sur le déchargement.

    Avec ton premier exemple, ça donnerait :

    Page "maitre" :
    Code html : 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
    <html>
    <head>
    	<title></title>
    	<script type="text/javascript">
    function savePrompt() {
     
    // si unsavedData = true, message montré
    // si unsavedData = false, la navigation n'est pas interrompue
     
    var message = 'On passe';
    return message;
     
     
    }
     
    window.onbeforeunload = savePrompt;
    </script>
    </head>
    <frameset>
    	<frame src="page1.html">
    </frameset>
    </html>

    Dans la page "maitre", on a remplacé la balise <body> par <frameset>(resp. </body> par </frameset>), la balise permet d'afficher au sein d'une même page, plusieurs autres pages.
    On a rajouté une balise <frame src="page1.html"> pour afficher ta première page. Visuellement le résultat sera identique à ton exemple.

    Page 1
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <html>
    <head>
    	<title></title>
    </head>
    <body>
    	Page 1 : Have fun xD!!!
     
    	<a href="page2.html" target="_self">test d'un lien</a>
    </body>
    </html>

    Dans Page 1 (page1.html)

    On a réécrit les liens avec l'attribut target="_self" cela signifie que l'on souhaite ouvrir le lien dans la même fenêtre. La page sera déchargée, mais comme la fenêtre qui contient la page n'est pas la fenêtre "maitre", mais la le fenêtre qui correspond à la balise <frame src="page1.html">, ta page "maitre", elle, ne sera pas déchargée et donc pas d'événement beforeunload.

    On aurait aussi pu rajouter un attribut name="zoneAffichagePages" sur la balise <frame ...>, dans ce cas les liens dans les autres pages se seraient écrits avec target="zoneAffichagePages".

    Maintenant une question : est-ce une application locale pour des utilisateurs comme par exemple un choix d'imprimante ? ou une application web ?
    Si c'est le premier cas, tu pourrais envisager une application .hta (sous windows oeuf corse).

  6. #6
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    En complément, mais c'est pas la panacée, tu peux aller gratter du coté de l'événement 'keydown' pour essayer d'annuler l'appui sur la touche F5. Ca semble fonctionner avec Firefox mais pas avec IE8. On peut éventuellement éviter l'icone de rafraichissement en ouvrant une fenêtre sans menu, mais il reste le menu contextuel quoique ça aussi ça doit pouvoir se gérer.

Discussions similaires

  1. [Javascript] Fermeture d'une page fille et reactualisation de la page mère
    Par tchoukapi dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/07/2006, 19h26
  2. fermeture d'une page
    Par kenny49 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/06/2006, 14h38
  3. fermeture d' une forme avec AnimateWindow
    Par nopnop dans le forum Delphi
    Réponses: 6
    Dernier message: 05/06/2006, 11h32
  4. Fermeture d'une Fiche avec animation
    Par touhami dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2006, 19h43
  5. Message d'erreur à la fermeture d'une page web
    Par WELCOMSMAIL dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 26/04/2006, 17h12

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