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 :

Empêcher la fermeture d'une fenetre


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Points : 137
    Points
    137
    Par défaut Empêcher la fermeture d'une fenetre
    Bonsoir à tous,
    J'ai passer quelques heures sur différents forums pour chercher comment empêcher la fermeture d'une page php, mais je n'ai rien trouvé de satisfaisant.
    l'utilisation de onunload dans la balise body ne marche tout simplement pas (en tout cas chez moi, avec firefox); l'utilisation de onbeforeunload ne marche qu'une fois sur deux, et ne fait qu'afficher "Cette page demande de confirmer sa fermeture ; des données saisies pourraient ne pas être enregistrées.", alors que je veux être en mesure d'empêcher la fermeture de la page (que ce soit avec ctr+w ou alt+f4) sans afficher aucun message.
    Voici mon code:

    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
    <html>
    <head>
    <script type="text/javascript">
    var confirmOnLeave = function(msg) {
        window.onbeforeunload = function (e) {
            e = e || window.event;
            msg = msg || '';
            return msg;
        };
    };
    confirmOnLeave();
    confirmOnLeave('Vous allez perdre votre travail, êtes vous sûr(e) de vouloir quitter la page ?');
    window.onbeforeunload = confirmExit;
    </script>
    </head>
    <body>...</body>
    </html>
    j'ai aussi essayer cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript">
    	window.onbeforeunload = function(){
    		return 1;
    	};
    </script>
    à la place de la balise script, ce qui a donné le même résultat.

    C'est pourquoi je solicite votre aide !
    (je précise que c'est pour utiliser ce code sur le serveur local installé sur mon ordi, et non pour développer un site web à part entière !, donc pas de souci du coté de la gêne que cela pourrait susciter à des utilisateurs).
    Merci d'avance!

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    il n'est pas possible de bloquer complètement la fermeture d'une fenêtre en JavaScript.

    puisque vous êtes seul à utiliser le serveur, vous pouvez utiliser du JavaScript pour enregistrer régulièrement le travail en cours et comme ça vous ne perdez pas de données si vous fermez le mauvais onglet.

  3. #3
    Membre habitué Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Points : 137
    Points
    137
    Par défaut
    En effet il serait possible de faire cela, mais le but n'est pas spécialement que les données soit enregistrées, mais plutôt que l'utilisateur du serveur local soit obligé de cliquer sur le bouton déconnexion, afin qu'un script de déconnexion puisse s'exécuter immédiatement à la déconnexion (et non quelques minutes plus tard); je voudrais donc empêcher les combinaisons 'alt f4' et 'ctrl w'. Si javascript est capable d'intercepter ces événements (ce que je n'ai pas vraiment réussi à faire, mais qui doit être possible par une méthode similaire à onbeforeunload), il doit bien être possible d'empêcher la fermeture du navigateur (et donc de la page en question).
    Si ce n'est vraiment pas possible en javascript, il faudra peut-être que je me tourne vers les scripts vbs afin de carrément désactiver ces combinaisons de touches tant que la déconnexion n'est pas effectuée !

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    le même système peut aussi être utilisé pour l'information de connexion.
    un code JavaScript peut envoyer toutes les 10 secondes le message "je suis là" et si le message n'a pas été reçu au bout de 30 secondes par exemple, l'utilisateur est considéré comme déconnecté.

  5. #5
    Membre habitué Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Points : 137
    Points
    137
    Par défaut
    Merci de cette réponse que je vais tester;
    Sinon, n'y a-t-il pas moyen de capter l'événement de fermeture de la page pour lancer ce script de déconnexion (sur la machine client ou serveur, peut m'importe puisque c'est la même machine), sans pour autant empêcher la fermeture ?
    Si tel est le cas, quel est le nom de l'événement de fermeture (j'ai l'impression que l'événement 'onbeforeunload' ne permet que d'afficher un message prédéfini avant la fermeture, mais pas de lancer un script ?).

  6. #6
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 739
    Points
    4 739
    Par défaut
    La question à déjà été évoquée ici...

    https://www.developpez.net/forums/d1...nbeforeunload/
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  7. #7
    Membre habitué Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,
    j'ai essayé le code proposé dans l'autre forum,
    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
    <!DOCTYPE html>
    <head>
    <title>test onbeforeounload</title>
    <script type="text/javascript">
    window.onbeforeunload = test;
    function test()
    {
      doo=confirm("Confirmez la fermeture...")
      if(doo){ alert ("oui") }
      else { alert("non") }
     return doo
    }
    </script>
    </head>
    <body>
    Ceci est un test
    </body>
    mais j'ai l'impression qu'il ne marche pas car quand je ferme la fenêtre rien ne se passe.
    (si je remplace le 'return doo' par 'return 1' il y a bien la fenêtre par défaut qui demande si l'on veut vraiment quitter la page, mais le code de la fonction doo n'est pas exécuté !).
    Je ne sais donc vraiment pas quoi faire, et c'est vraiment déprimant de se dire que l'on ne trouve pas comment faire ça, surtout quand on est déjà tombé sur une page internet (vérolée?) qu'il était non seulement impossible de fermer, mais qui en plus restait continuellement en avant plan, empêchant d'afficher le bureau et donc obligeant à redémarrer l'ordi !
    (ce qui prouve qu'il existe une solution au problème)

  8. #8
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 739
    Points
    4 739
    Par défaut
    Non, visiblement t' a pas bien lu le sujet que je t'ai mis en lien.

    ça ne marche que de cette manière :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        window.onbeforeunload = function () {
     
          // opérations de logout ...
          // et qui ne peuvent gérer aucun retour.
     
        }

    ou encore
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        window.onbeforeunload = function () {
          return 0;
        }

    Et ce que tu décris existait dans le passé, mais aujourd'hui les navigateurs sont mieux armés contre ce genre de pratiques faites par des mauvais hackeurs noirs.

    Les Navigateurs sont des logiciels comme les autres, et l'exécution du JavaScript se fait selon leur bon vouloir et dans un bac à sable qui est délimité.
    Ça veut dire que tout interaction avec quelque chose d'extérieur à une page internet qu'ils affichent doit passer par leur permission, et une opération comme celle que tu cherche à faire est interdite. Si une page réussit à faire ce genre de truc que tu cherche a faire, alors tu peux être certain qu'il y aura une mise à jour du navigateur qui corrigera ce type d' aberration.
    .
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  9. #9
    Membre habitué Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Points : 137
    Points
    137
    Par défaut
    Donc si j'ai bien compris, en utilisant la première méthode que tu proposes, je ne pourrais exécuter aucun code sur la machine client au moment de la fermeture, mais seulement sur la machine serveur ?
    Dans ce cas je comprend mieux !
    Mais alors que puis-je mettre comme code dans la fonction (la première que tu propose), si je veux qu'un script .bat (ou n'importe quel autre script, ceci n'est qu'à titre d'exemple) s'exécute sur le serveur; En effet, si je demande d'exécuter fichier déconnexion.bat (chargé par exemple de supprimer les fichiers temporaires sur le serveur), cela ne risque-t-il pas d'être interprété comme une demande de l'exécuter sur la machine client, et donc de ne pas être exécuté tout simplement ?
    Pour tout dire, je n'ai pas trop compris si, quand on exécute un script, celui-ci est exécuté sur la machine client ou sur la machine serveur (puisque mon ordinateur fais les deux à la fois) !
    Merci de votre aide si efficace !

  10. #10
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 739
    Points
    4 739
    Par défaut
    quand le navigateur donne la main à la fonction pointée par window.onbeforeunload il a d'abord désactivé un tas de fonctionnalités de javascript, comme par exemple la commande confirm, et je suppose aussi des commandes d'entrées sorties.
    J'imagine qu'il est peut être possible d'envoyer un message Ajax au serveur, mais pas de recevoir sa réponse.
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  11. #11
    Membre habitué Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Points : 137
    Points
    137
    Par défaut
    Merci de cette réponse si rapide;
    Est-il possible d'avoir encore quelques précisions ? Voici mon code (schématiquement).
    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
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<link rel="stylesheet" href="index.css"/>
    		<title>mon appli web</title>
    		<script type="text/javascript">
                            window.onbeforeunload = function () {
                                    //QUE PUIS-JE METTRE ICI ??
                            }
                    </script>
    	</head>
    	<body>
    		<!--contenu de ma page php-->
    	</body>
    </html>
    Que puis-je mettre dans la fonction function(){...} afin de lancer l'exécution d'un .bat sur le serveur (ou sur la machine client, mais je pense que c'est impossible) au moment ou l'utilisateur ferme la page ou carrément le navigateur. (Dois-je de plus rajouter quelque chose dans la balise body, du genre <body onbeforeunload=...> ?)
    En réalité, mon but est plus de créer une sorte d'application qu'un site web, mais j'ai trouvé que le php était assez pratique (en effet en c++ j'ai réussi à faire une fenêtre qu'on ne peut fermer par alt f4, mais j'ai été confronté à la difficulté de la mise en page et des formulaires !)

  12. #12
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 739
    Points
    4 739
    Par défaut
    comme je te l'ai écrit, à la limite tu peux peut être faire un call en Ajax, mais sans attendre la réponse.

    Si tu veux faire une appli en JS, alors il faut la faire en nodeJs. / Electron, WebKit, ... cette appli tu peux aussi la faire dialoguer avec un serveur, ou ce que tu voudra
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  13. #13
    Membre habitué Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Points : 137
    Points
    137
    Par défaut
    ok, je vais suivre quelques tutoriels sur ajax, puis je m'informerai sur node.js
    Merci pour ces réponses!

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

Discussions similaires

  1. Empêcher la réduction et la fermeture d'une fenetre
    Par doderic dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 13/03/2008, 15h54
  2. [debutant] Pb fermeture d une fenetre
    Par yup dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/06/2006, 18h48
  3. [ApplicationFrame][jfreechart]fermeture d'une fenetre
    Par cmoa59 dans le forum Agents de placement/Fenêtres
    Réponses: 32
    Dernier message: 15/06/2005, 11h41
  4. evenement a la fermeture d' une fenetre
    Par Sh. dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/03/2005, 14h30
  5. Detecter la fermeture d'une fenetre MsDos
    Par Akta3d dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/07/2004, 17h53

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