2012-07-12 9 views

risposta

7

La semplice risposta è no - modelli di sicurezza browser non consentono di rilevare in modo esplicito in che modo l'utente ha scelto di lasciare la tua pagina (refresh/chiusura/interno link/link esterno).

detect refresh browser for unload/beforeunload when browser closed

E 'possibile - utilizzando un cookie - per verificare quando un utente carica la pagina se erano in precedenza su quel sito nella stessa sessione - per esempio rilevare se hanno ricreato - ma non prima di aggiornare:

Detect Browser Refresh in Javascript

Check if page gets reloaded or refreshed in Javascript

Un approccio parziale e imperfetta sarebbe quello di rilevare se hanno premuto "F5" o "Ctrl + R" o "Cmd + R" (tasti di scelta rapida per l'aggiornamento) appena prima dello scaricamento della pagina. Questo rileverà alcuni aggiornamenti, ma non dove l'utente ha effettivamente cliccato sul pulsante di aggiornamento.

(function($) { 
    var refreshKeyPressed = false; 
    var modifierPressed = false; 

    var f5key = 116; 
    var rkey = 82; 
    var modkey = [17, 224, 91, 93]; 

    // Check for refresh keys 
    $(document).bind(
     'keydown', 
     function(evt) { 
      // Check for refresh 
      if (evt.which == f5key || window.modifierPressed && evt.which == rkey) { 
       refreshKeyPressed = true; 
      } 

      // Check for modifier 
      if (modkey.indexOf(evt.which) >= 0) { 
       modifierPressed = true; 
      } 
     } 
    ); 

    // Check for refresh keys 
    $(document).bind(
     'keyup', 
     function(evt) { 
      // Check undo keys 
      if (evt.which == f5key || evt.which == rkey) { 
       refreshKeyPressed = false; 
      } 

      // Check for modifier 
      if (modkey.indexOf(evt.which) >= 0) { 
       modifierPressed = false; 
      } 
     } 
    ); 

    $(window).bind('beforeunload', function(event) { 
     var message = "not refreshed"; 

     if (refreshKeyPressed) { 
      message = "refreshed"; 
     } 

     event.returnValue = message; 
     return message; 
    }); 
}(jQuery)); 

È inoltre possibile rilevare quando un link viene cliccato se la destinazione del collegamento è sullo stesso sito oppure no: How can I detect when the user is leaving my site, not just going to a different page?