2011-04-09 14 views

Respuesta

13

No puede. Una actualización de página es como navegar y descargar el DOM para que siempre se llame al evento onbeforeunload.

+0

Gracias, podemos hacer que suceda mediante el conjunto de FLAG, en caso afirmativo, ¿cómo puedo identificar la página está recibiendo actualización presionando F5? – mymotherland

+0

@Dinesh, el objetivo de mi respuesta es que esto no se puede hacer porque no se puede distinguir entre un usuario que presiona F5 y un usuario que hace clic en un enlace para navegar. –

+0

bien Darin, gracias una vez más – mymotherland

4

Para lo que está buscando, la mejor manera de tener el control refrescando la página web sería con la función onKeyDown. Desafortunadamente, si presiona el botón Actualizar directamente desde su navegador, se volverá a cargar el DOM, por lo que técnicamente no hay manera de evitar la actualización de esta acción.

Entrando en el mismo problema, encontré esta página web http://asquare.net/javascript/tests/KeyCode.html donde puede verificar la respuesta de su navegador a los eventos del teclado. Aquí puede comenzar a descubrir por qué onKeyDown es la mejor opción. Chrome no reacciona con la función onKeyPress.

Solo necesita una variable para controlar la acción refrescante. Si el usuario presiona la tecla, la acción onBeforeUnload no se ejecutará.

var refresh = false; //Control variable to control refresh access 
j$(window).bind('beforeunload', function(){ 
    if (refresh == false) { // If F5 is not pressed 
     return "Do you really want to leave?"; 
    } 
}); 
j$(window).keydown(function(event) { 
    if (event.keyCode == 116) { // User presses F5 to refresh 
    refresh = true; 
    } 
}); 
+0

Funcionó para mí en Chrome. Buena solución parcial. –

+0

en mi caso event.keyCode muestra indefinido. –

1

hay dos cosas a tener en cuenta. (1) La función "window.onbeforeunload" se ejecuta cuando se suelta la tecla f5 (onkeyup). Cualquier cosa para modificar la apariencia del diálogo debe ocurrir antes de eso como onkeydown. (2) La función no funcionará si el retorno va seguido de un valor nulo.

Si configura una variable global para usar como un valor de retorno Y la pone nula si se presiona la tecla f5, el diálogo no aparece cuando se usa f5 para actualizar. Sin embargo, aparece si se presiona el botón "Cerrar". Tenga en cuenta que el código dentro de "onbeforeunload" se ejecutará incluso si el valor de retorno es nulo, por lo que debe verificar su valor de retorno si desea que también se deshabilite el código.

document.onkeydown = KeyCheck; 
window.returnMessage="You are now logged out."; 
function KeyCheck(e) { 
    var key = (window.event) ? event.keyCode : e.keyCode; 
    alert(key); 
    if(key==116) {window.returnMessage=null;} 
    } 
$(function(){ 
    window.onbeforeunload = function(event) { 
     if(window.returnMessage.length > 0) {logoutFunction();} 
     return window.returnMessage; 
     } 
    }); 
Cuestiones relacionadas