2012-05-01 9 views

Respuesta

18

Si es refrescante, window.onunload se disparará.

// From MDN 
window.onunload = unloadPage; 
function unloadPage() 
{ 
    alert("unload event detected!"); 
} 

https://developer.mozilla.org/en/DOM/window.onunload

Si lo que desea es un cuadro de confirmación para permitir que se queden, utilice esto:

window.onbeforeunload = function() { 
    return "Are you sure you want to navigate away?"; 
} 
+0

1 .. .. uno más preciso trabajar en todos los navegadores – agpt

+4

Esto también se disparará cuando el usuario cierra el navegador o la página o cuando el usuario intenta navegar lejos. – MetalPhoenix

+0

@MetalPhoenix por supuesto que lo hará. No es necesario desestimar algo que cualquier desarrollador competente reconocería. – AlienWebguy

3

Se puede crear un campo oculto y establezca su valor en la primera carga de la página. Cuando la página se carga de nuevo, puede verificar el campo oculto. Si está vacío, la página se carga por primera vez; de lo contrario, se actualiza. Algo como esto:

HTML

<body onLoad="CheckPageLoad();"> 

    <input type="hidden" name="visit" id="visit" value="" /> 

</body> 

JS

function CheckPageLoad() { 
    if (document.getElementById("visit").value == "") { 
     // This is a fresh page load 
     document.getElementById("visit").value = "1"; 
    } 
    else { 
     // This is a page refresh 
    } 
}​ 
+0

Hmm, pero el valor siempre se vaciará cuando actualice. Por lo tanto, nunca puede determinar si el campo tenía previamente un valor. –

+0

Esto podría estar bien si la página almacena el estado de los controles en un estado de visualización. El problema es cómo abordar una página más compleja que causa devoluciones. Si esta es una página simple que depende de la interacción del usuario que podría colocar un valor en ese campo, entonces esta es una gran solución. Sin embargo, si la página genera varias devoluciones de datos con muchos campos para que el usuario complete, se vuelve incalculable. – MetalPhoenix

1

Hay algunas aclaraciones notas sobre la lucha libre con esto creo que son críticos.

En primer lugar, el sistema de campo de actualización/oculto funciona al principio de la copia de la nueva página y después, no al salir de la copia de la primera página.

De mi investigación de este método y algunos otros, no es posible, principalmente debido a los estándares de privacidad, detectar una actualización de una página durante la descarga o antes. solo después de la carga de la nueva página y más tarde.

que tenían una solicitud problema similar, pero básicamente era terminar la sesión al salir de la página, y mientras mira a través de eso, encontró que un explorador trata una Recargar/Actualizar como dos piezas distintas:

  1. cerrar la ventana actual (dispara antes de la descarga y en la descarga de eventos js).
  2. solicite la página como si nunca la hubiera tenido. La sesión en el servidor, por supuesto, no tiene ningún problema, pero ninguna cadena de consulta cambia/agrega valores a la última URL utilizada de la página.

Estos suceden en ese orden también. Solo un navegador personalizado o no estándar se comportará de manera diferente.

1
$(function() { 
    if (performance.navigation.type == 1) { 
     yourFunction(); 
    } 
}); 

Más sobre PerformanceNavigation objeto devuelto por performance.navigation

Cuestiones relacionadas