Solución:
Actualizar Un comentario reciente afirma que esto no funciona en el nuevo Chrome … Como se muestra en jsFiddle, y probado en mi sitio personal, este método todavía funciona a partir de Chrome ver 26.0.1410.64 m
Esto es REALMENTE fácil en jQuery por cierto:
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);
En una nota al margen: esto solo deshabilita el botón f5 en el teclado. Para deshabilitar realmente la actualización, debe usar un script del lado del servidor para verificar los cambios de estado de la página. No puedo decir que realmente sepa cómo hacer esto porque todavía no lo he hecho.
En el sitio de software en el que trabajo, usamos mi función disableF5 junto con los datos de sesión de Codeigniter. Por ejemplo, hay un botón de bloqueo que bloqueará la pantalla y solicitará un cuadro de diálogo de contraseña. La función “disableF5” es rápida y fácil y evita que el botón haga nada. Sin embargo, para evitar el clic del mouse en el botón de actualización, suceden un par de cosas.
- Cuando se hace clic en el bloqueo, los datos de la sesión del usuario tienen una variable llamada “bloqueada” que se convierte en VERDADERA
- Cuando se hace clic en el botón de actualización, en el método de carga de la página maestra hay una verificación con los datos de la sesión para “bloqueado”, si es VERDADERO, entonces simplemente no permitimos la redirección y la página nunca cambia, independientemente del destino solicitado
PROPINA: Intente usar una cookie configurada por el servidor, como PHP $_SESSION
, o incluso .Net’s Response.Cookies
, para mantener “dónde” se encuentra su cliente en su sitio. Este es el mas Vainilla manera de hacer lo que hago con la clase Session de CI. La gran diferencia es que CI usa una tabla en su base de datos, mientras que estos vainilla Los métodos almacenan una cookie editable en el cliente. Sin embargo, la desventaja es que un usuario puede borrar sus cookies.
Desde el sitio que Enrique publicó:
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;
}
}
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;
};