web-dev-qa-db-fra.com

Comment détecter un événement de la fenêtre / onglet du navigateur?

J'essaie avec onbeforeunload et la fonction de déchargement. Mais ça n'a pas marché. En cliquant sur un lien ou en rafraîchissant, cet événement s'est déclenché. Je souhaite un événement déclenché uniquement à la fermeture d'une fenêtre ou d'un onglet du navigateur. Le code doit fonctionner dans tous les navigateurs.

J'utilise le code suivant dans Masterpage.

<script type="text/jscript">

    var leaving = true;
    var isClose = false;

    function EndChatSession() {
        var request = GetRequest();
        request.open("GET", "../Chat.aspx", true);
        request.send();
    }
    document.onkeydown = checkKeycode
    function checkKeycode(e) {
        var keycode;
        if (window.event)
            keycode = window.event.keyCode;
        else if (e)
            keycode = e.which;
        if (keycode == 116) {
            isClose = true;
        }
    }
    function somefunction() {
        isClose = true;
    }
    window.onbeforeunload = function (e) {
       if (!e) e = event;
        if (leaving) {
             EndChatSession();
             e.returnValue = "Are You Sure";

        }
    }
    function GetRequest() {
        var xmlHttp = null;
        try {
            // Firefox, Opera 8.0+, Safari
            xmlHttp = new XMLHttpRequest();
        }
        catch (e) {
            //Internet Explorer
            try {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        return xmlHttp;
    }    
</script>

et dans mon tag corps:

Le code ci-dessus fonctionne dans IE mais pas en chrome ...

24
Kubanthiran

Ce code empêche les événements de case à cocher. Cela fonctionne lorsque l'utilisateur clique sur le bouton de fermeture du navigateur mais ne fonctionne pas lorsque la case à cocher est cochée. Vous pouvez le modifier pour d’autres contrôles (texbox, radiobutton, etc.)

    window.onbeforeunload = function () {
        return "Are you sure?";
    }

    $(function () {
        $('input[type="checkbox"]').click(function () {
            window.onbeforeunload = function () { };
        });
    });
21
sekercie

Vous ne pouvez pas le détecter avec javascript.

Seuls les événements qui détectent le déchargement/la fermeture de page sont window.onbeforeunload et window.unload . Aucun de ces événements ne peut vous dire comment vous avez fermé la page.

17
rasmusx
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
var validNavigation = false;

function wireUpEvents() {
var dont_confirm_leave = 0; //set dont_confirm_leave to 1 when you want the    user to be able to leave withou confirmation
 var leave_message = 'ServerThemes.Net Recommend BEST WEB HOSTING at new tab  window. Good things will come to you'
 function goodbye(e) {
if (!validNavigation) {
window.open("http://serverthemes.net/best-web-hosting-services","_blank");
return leave_message;

}
}
window.onbeforeunload=goodbye;

// Attach the event keypress to exclude the F5 refresh
$(document).bind('keypress', function(e) {
if (e.keyCode == 116){
  validNavigation = true;
 }
 });

// Attach the event click for all links in the page
$("a").bind("click", function() {
validNavigation = true;
});
  // Attach the event submit for all forms in the page
 $("form").bind("submit", function() {
 validNavigation = true;
});

 // Attach the event click for all inputs in the page
  $("input[type=submit]").bind("click", function() {
 validNavigation = true;
 });

 }

  // Wire up the events as soon as the DOM tree is ready
   $(document).ready(function() {
   wireUpEvents();
   });
   </script>

J'ai répondu à: Pouvez-vous utiliser JavaScript pour déterminer si un utilisateur a fermé un onglet de navigateur? Fermé un navigateur? Ou s'il a quitté un navigateur?

4
Server Themes

Vous pouvez aussi faire comme ci-dessous.

mis en dessous du code de script dans la balise header

<script type="text/javascript" language="text/javascript"> 
function handleBrowserCloseButton(event) { 
   if (($(window).width() - window.event.clientX) < 35 && window.event.clientY < 0) 
    {
      //Call method by Ajax call
      alert('Browser close button clicked');    
    } 
} 
</script>

appelez la fonction ci-dessus depuis la balise body comme ci-dessous

<body onbeforeunload="handleBrowserCloseButton(event);">

Merci

2
Vishal Patel

pour faire la différence entre une actualisation et un onglet ou un navigateur fermé, voici comment je l'ai corrigé:

<script>
    function endSession() {
         // Browser or Broswer tab is closed
         // Write code here
    }
</script>

<body onpagehide="endSession();">

</body>
0
Tareq BOUCHAAR