2012-07-12 32 views

Respuesta

7

La respuesta simple es no - los modelos de seguridad de los navegadores no permiten detectar de forma explícita de qué manera un usuario ha optado por dejar su página (refresh/cierre interna/enlace/enlace externo).

detect refresh browser for unload/beforeunload when browser closed

Es posible - mediante una cookie - para comprobar si un usuario carga la página si estaban previamente en ese sitio en la misma sesión - por ejemplo, detectar si recrearon - pero no antes de que se refrescan:

Detect Browser Refresh in Javascript

Check if page gets reloaded or refreshed in Javascript

Un enfoque parcial e imperfecta sería para detectar si se pulsan la tecla "F5" o "Ctrl + R" o "Cmd + R" (atajos de teclado para actualizar) justo antes de que se descargue la página. Esto detectará algunas actualizaciones, pero no donde el usuario realmente hizo clic en el botón de actualización.

(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)); 

También puede detectar cuando un enlace se hace clic en si el destino del enlace es en el mismo o sitio no: How can I detect when the user is leaving my site, not just going to a different page?

Cuestiones relacionadas