Distriggers F5 e aggiorna il browser utilizzando JavaScript

Voglio disabilitare il refresh del browser usando JavaScript.

Attualmente sto usando window.onbeforeunload e non voglio che venga chiamato quando l’utente aggiorna il browser.

Qual’è il miglior modo di farlo?

Aggiornamento Un recente commento afferma che questo non funziona nel nuovo Chrome … Come mostrato in jsFiddle e testato sul mio sito personale, questo metodo funziona ancora da Chrome ver 26.0.1410.64 m

A proposito, questo è DAVVERO facile in jQuery:

jsFiddle

 // slight update to account for browsers not supporting e.which function disableF5(e) { if ((e.which || e.keyCode) == 116) e.preventDefault(); }; // To disable f5 /* jQuery < 1.7 */ $(document).bind("keydown", disableF5); /* OR jQuery >= 1.7 */ $(document).on("keydown", disableF5); // To re-enable f5 /* jQuery < 1.7 */ $(document).unbind("keydown", disableF5); /* OR jQuery >= 1.7 */ $(document).off("keydown", disableF5); 

Nota a margine: distriggers solo il pulsante f5 sulla tastiera. Per disabilitare veramente l’aggiornamento è necessario utilizzare uno script lato server per verificare le modifiche dello stato della pagina. Non posso dire di saperlo davvero come non l’ho ancora fatto.

Sul sito del software in cui lavoro, usiamo la mia funzione disableF5 in congiunzione con i dati della sessione di Codeigniter. Ad esempio, c’è un pulsante di blocco che bloccherà lo schermo e richiederà una finestra di dialogo password. La funzione “disableF5” è veloce e facile e impedisce a quel pulsante di fare qualsiasi cosa. Tuttavia, per impedire il clic del mouse sul pulsante di aggiornamento, si verificano un paio di cose.

  1. Quando viene cliccato il blocco, i dati della sessione utente hanno una variabile chiamata “locked” che diventa TRUE
  2. Quando si fa clic sul pulsante di aggiornamento, sul metodo di caricamento della pagina principale è un controllo sui dati di sessione per “bloccato”, se TRUE, quindi non è consentito il reindirizzamento e la pagina non cambia mai, indipendentemente dalla destinazione richiesta

SUGGERIMENTO: prova a utilizzare un cookie impostato sul server, ad esempio $_SESSION PHP o anche .Net’s Response.Cookies , per mantenere “dove” il tuo cliente si trova nel tuo sito. Questo è il modo più vanigliato di fare ciò che faccio con la class Session di CI. La grande differenza è che CI usa una tabella nel DB, mentre questi metodi vanilla memorizzano un cookie modificabile nel client. Lo svantaggio però è che un utente può cancellare i suoi cookie.

Dal sito Enrique pubblicato:

 window.history.forward(1); document.attachEvent("onkeydown", my_onkeydown_handler); function my_onkeydown_handler() { switch (event.keyCode) { case 116 : // 'F5' event.returnValue = false; event.keyCode = 0; window.status = "We have disabled F5"; break; } } 

per mac cmd + r, cmd + shift + r per necessità.

 function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); }; $(document).ready(function(){ $(document).on("keydown", disableF5); }); 
 var ctrlKeyDown = false; $(document).ready(function(){ $(document).on("keydown", keydown); $(document).on("keyup", keyup); }); function keydown(e) { if ((e.which || e.keyCode) == 116 || ((e.which || e.keyCode) == 82 && ctrlKeyDown)) { // Pressing F5 or Ctrl+R e.preventDefault(); } else if ((e.which || e.keyCode) == 17) { // Pressing only Ctrl ctrlKeyDown = true; } }; function keyup(e){ // Key up Ctrl if ((e.which || e.keyCode) == 17) ctrlKeyDown = false; }; 
 $(window).bind('beforeunload', function(e) { return "Unloading this page may lose data. What do you want to do..." e.preventDefault(); }); 

Questo è il codice che sto usando per disabilitare l’aggiornamento su IE e firefox (Funziona bene per F5, Ctr + F5 e Ctrl + R)

  

Se non si desidera utilizzare useragent per rilevare il tipo di browser utilizzato ($ .browser utilizza navigator.userAgent per determinare la piattaforma), è ansible utilizzare

if('MozBoxSizing' in document.documentElement.style) – restituisce true per firefox

Usalo per i browser moderni:

 function my_onkeydown_handler( event ) { switch (event.keyCode) { case 116 : // 'F5' event.preventDefault(); event.keyCode = 0; window.status = "F5 disabled"; break; } } document.addEventListener("keydown", my_onkeydown_handler); 

Funziona per me in tutti i browser:

 document.onkeydown = function(){ switch (event.keyCode){ case 116 : //F5 button event.returnValue = false; event.keyCode = 0; return false; case 82 : //R button if (event.ctrlKey){ event.returnValue = false; event.keyCode = 0; return false; } } } 

Puoi usare direttamente hotkey da facce ricche se stai usando JSF.

     

Se si desidera disabilitare ctrl + f5, ctrl + R, f5, backspace, è ansible utilizzare questo semplice codice. Questo codice funziona su Mozila e su Chrome. Aggiungi questo codice all’interno del tag del tuo corpo: