2013-05-14 15 views
11

Attualmente sto rilevando se un utente del mio sito chiude la finestra/scheda o cambia l'URL.javascript on window close event

Sto usando il codice follwoing, che funziona perfettamente:

var validNavigation = false; 

function endSession() { 
    // Browser or broswer tab is closed 
    // Do sth here ... 
    alert("bye"); 

} 

function wireUpEvents() { 

    window.onbeforeunload = function() { 
     if (!validNavigation) { 
     endSession(); 
     } 
    } 

    // Attach the event keypress to exclude the F5 refresh 
    $(document).bind('keypress', function(e) { 
    if (e.keyCode == 116){ 
     validNavigation = true; 
    } 
    }); 

    // Attach the event click for all links in the page 
    $("a").bind("click", function() { 
    validNavigation = true; 
    }); 

    // Attach the event submit for all forms in the page 
    $("form").bind("submit", function() { 
    validNavigation = true; 
    }); 

    // Attach the event click for all inputs in the page 
    $("input[type=submit]").bind("click", function() { 
    validNavigation = true; 
    }); 

} 


$(document).ready(function() { 
    wireUpEvents(); 
}); 

Il mio problema è che vorrei cambiare l'evento da un avviso per una sovrapposizione. Ho installato una sovrapposizione div nascosto e sostituito la segnalazione nel codice precedente con:

$('.overlay').css('display','block'); 

Questo ora non funziona più, come non c'è nulla all'interno del div per ottenere l'utente a rimanere sulla pagina. (l'utente non deve fare clic su un pulsante all'interno di un avviso)

Qualche suggerimento su come posso aggirare questo?

Cheers, Dan

+0

Perché non basta usare 'window.onbeforeunload'? So che non è un div di fantasia, ma è sicuramente destinato a questo genere di cose. – Powerslave

+0

window.onbeforeunload era un'opzione ma ora ho bisogno di un div di fantasia che ha bisogno di stile. – danyo

+0

Duplicato su http://stackoverflow.com/questions/276660/how-can-i-override-the-onbeforeunload-dialog-and-replace-it-with-my-own/276739 –

risposta

8

La finestra stretta evento viene generato come l'ultimo evento. Quindi nessun altro evento viene licenziato dopo di esso.

È possibile utilizzare l'evento beforeunload con Jquery per mostrare la sovrapposizione sullo schermo.

Il seguente collegamento potrebbe aiutare: link

+0

Il link che hai postato è * estremamente * utile. GRAZIE! – Ethereal