2012-05-01 11 views

risposta

18

Se è rinfrescante, window.onunload sparerà.

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

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

Se si desidera solo una finestra di conferma per consentire loro di rimanere, utilizzare questo:

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

+1 .. più precisa uno .. che lavorano in tutti i browser – agpt

+4

questo sarà anche il fuoco quando l'utente chiude il browser o la pagina o quando l'utente tenta di navigare lontano. – MetalPhoenix

+0

@MetalPhoenix ovviamente lo farà. Non c'è bisogno di downvotare su qualcosa che uno sviluppatore competente riconoscerebbe. – AlienWebguy

3

è possibile creare un campo nascosto e impostare il valore sulla prima caricamento della pagina. Quando la pagina viene caricata di nuovo, puoi controllare il campo nascosto. Se è vuoto, la pagina viene caricata per la prima volta, altrimenti viene aggiornata. Qualche cosa come questa:

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, ma il valore verrà sempre svuotato quando si aggiorna. Quindi non può mai determinare se il campo avesse precedentemente un valore. –

+0

Potrebbe andare bene se la pagina memorizza lo stato dei controlli in uno stato di visualizzazione. Il problema è come indirizzare una pagina più complessa che causa i postback. Se questa è una pagina semplice che si basa sull'interazione dell'utente che potrebbe quindi inserire un valore in quel campo, allora questa è un'ottima soluzione. Se, tuttavia, la pagina genera più postback con molti campi che l'utente può compilare, diventa non scalabile. – MetalPhoenix

1

Ci sono alcuni chiarimenti note sul wrestling con questo credo sono critici.

In primo luogo, il/sistema di campo nascosto di aggiornamento funziona sul principio della nuova copia della pagina e dopo, non lasciando la prima copia pagina.

Dalla mia ricerca di questo metodo e pochi altri, non c'è modo, principalmente a causa standard di privacy, per rilevare un aggiornamento di una pagina durante scarico o precedente. solo dopo il caricamento della nuova pagina e dopo.

ho avuto una richiesta problema simile, ma in fondo era terminare la sessione in uscita della pagina e guardando attraverso che, ha scoperto che un browser tratta una Ricarica/Aggiorna da due pezzi distinti:

  1. chiudere la finestra corrente (incendi onbeforeunload e onunload eventi js).
  2. Richiedi la pagina come se non l'avessi mai. Naturalmente, la sessione sul server non ha alcun problema, ma nessuna modifica/aggiunta di querystring all'URL dell'ultimo utilizzo della pagina.

Questi si verificano anche in questo stesso ordine. Solo un browser personalizzato o non standard si comporterà in modo diverso.

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

più su PerformanceNavigation oggetto restituito dal performance.navigation

Problemi correlati