Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exécuter un script à la fermeture du site

Sujet résolu
Anonyme
    13 août 2016 à 19:53:36

    Bonjour, je souhaite vider le presse papier lors de la fermeture du navigateur ou de l'onglet sauf que je n'y arrive pas, j'ai essayé de mettre onunload et onbeforeunload dans le body, ça ne fonctionne pas...

    La fonction (tout en javascript) qui vide le presse papier fonctionne bien lorsque je l'appelle avec un bouton mais impossible lors de la fermeture ça ne fait rien, ça ferme juste la page.

    J'ai essayé sur tous les navigateurs c'est pareil...

    J'ai donc besoin de votre aide pour essayer de trouver la cause et un code qui pourrait marcher, merci de votre aide.


    HTML:

    <head>
    <script type="text/javascript" src="index.js"></script>
    </head>
    
    <body onbeforeunload="eraseClipboard();"> <!-- Ne fonctionne pas, ne fait rien lors de la fermeture !-->
    
    	<input type="text" id="emptyClipboard" class="emptyClipboard" value="&nbsp;" style="visibility: hidden;">
    	<button type="button" onclick="eraseClipboard();">Effacer le presse papier</button> <!-- Fonctionne, il est bien effacé !-->
    	
    </body>

    JS:

    function eraseClipboard() {
    	copyFieldValue('emptyClipboard');
    }
    
    function copyFieldValue(id){
    	
        var field = document.getElementById(id)
        field.focus()
        field.setSelectionRange(0, field.value.length)
        var copysuccess = copySelectionText()
    		
    }
    
    function copySelectionText(){
    	
        var copysuccess
        try{
            copysuccess = document.execCommand("copy")
        } catch(e){
            copysuccess = false
        }
    	
        return copysuccess	
    		
    }
    




    -
    Edité par Anonyme 13 août 2016 à 20:10:09

    • Partager sur Facebook
    • Partager sur Twitter
      18 août 2016 à 15:02:38

      essaie plutot en ajoutant l'événement à l'objet window comme ceci
      <!DOCTYPE html>
      <html>
      
      <head>
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
      <title>sans titre 1</title>
      </head>
      
      <body>
      <hr />
      <div style="text-align:center; font-size:35px">TEST onbeforeunload</div>
      <script type="text/javascript" language="javascript">
      window.onbeforeunload = function(){
      	// insérer fonction à exécuter à la fermeture  
      	return 'La page demande'; // text qui sera afficher seulement pour Internet Explorer
      }
      </script>
      </body>
      
      </html>
      
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        28 août 2016 à 19:24:42

        Bonjour, je suis désolé de la réponse tardive.

        Donc, oui ton code fonctionne pour IE mais pas pour les autres navigateurs, il semblerait qu'ils bloquent le code JS. 

        Y a-t-il un moyen de le faire fonctionner pour les autres navigateurs ? J'ai cherché sur Google, mais je n'y arrive pas...

        • Partager sur Facebook
        • Partager sur Twitter
          28 août 2016 à 22:39:33

          Vider le presse-papier c'est méga chiant. Je parie que le navigateur ne l'autorise que lors d'un événement utilisateur. Regarde si tu y arrives après un setTimeout. Si tu n'y arrives pas, abandonne ou tourne-toi vers un plugin qui aura plus de droits sur le presse-papier.

          Concernant l'événement "beforeunload", il n'est pas fiable. Si tu fermes simplement le navigateur, il n'y a pas de raison que l'événement s'exécute par exemple. La façon dont la plupart des sites que j'utilise ont de détecter la déconnexion, c'est d'envoyer régulièrement une requête AJAX, et quand il n'y a plus de reuqête, on suppose la déconnexion (je suppose qu'avec les web sockets c'est le même principe).

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            29 août 2016 à 22:29:37

            Même avec le timeout ça ne fonctionne pas.

            Je lâche l'affaire, je fais juste un bouton qui vide le presse-papier c'est tout.

            • Partager sur Facebook
            • Partager sur Twitter
              3 septembre 2016 à 10:02:54

              moi je l'utilise sur plusieur application ca fonctionne sur tout les navigateurs chrome firefox opera IE Edge

              IE lui permet en plus de la box par défaut a la fermeture d'afficher le message du return

              sinon dans tous les fonctions s'execute

              bien a toi

              • Partager sur Facebook
              • Partager sur Twitter
                3 septembre 2016 à 15:21:12

                Salut, en effet ce n'est pas fiable un simple bouton fera l'affaire :-)

                @ConcombreRouge la solution "d'envoyer régulièrement une requête AJAX"

                n'est pas une solution viable en termes de performances ^^

                Et avec soket.io il y a un événement qui se déclenche lors de la déconnexion (fiable)

                -
                Edité par EmixMaxime 3 septembre 2016 à 15:22:09

                • Partager sur Facebook
                • Partager sur Twitter
                  3 septembre 2016 à 15:41:50

                  Netflix et Youtube envoient des requêtes Ajax constamment  et je n'ai aucun problème de visionnage des vidéos.

                  soket.io est une bibliothèque. Tu ne peux pas dire que son événement est fiable sans t'interroger sur la façon dont il est implémenté. En l'occurrence il a un fallback AJAX (long polling apriori) quand webSocket n'est pas dispo, et là la question de la détection de la déconnexion se pose.

                  À noter que j'étais un peu HS ici parce que c'est côté client qu'on vide le presse-papier, donc détecter côté serveur quand la connexion se coupe n'a pas d'intérêt, mais ça illustrait le fait que onbeforeunload n'est pas fiable (à part pour afficher un alert/confirm bloquant, ce qui est plus casse-couilles qu'utile 9 fois sur 10) et que beaucoup de sites se débrouillent autrement pour détecter une déconnexion.

                  -
                  Edité par tabouretBleu 3 septembre 2016 à 15:42:35

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 septembre 2016 à 16:07:13

                    Tu ne peux pas comparer les serveurs de YouTube/Netflix à "nos" serveurs.

                    En règles générales on souhaite éviter les appels AJAX inutiles que ce soit pour l'utilisateur ou pour le serveur...

                    Je donnais l'exemple de soket.io car c'est souvent parlant ^^ Et oui il utilise des requêtes AJAX quand les websocket ne sont pas supportés.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Exécuter un script à la fermeture du site

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown