2013-05-14 15 views
11

Obecnie wykrywam, czy użytkownik mojej witryny zamyka okno/kartę lub zmienia adres URL.javascript na zdarzeniu zamykania okna

Używam follwoing kod, który działa perfekcyjnie:

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(); 
}); 

Mój problem to chciałbym zmienić zdarzenie z wpisem do nakładki. Mam konfiguracji aż ukryty div nakładkę i zastąpić alert w powyższym kodzie z:

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

To teraz już nie działa, jak nie ma nic w div, aby uzyskać użytkownika do pozostania na stronie. (użytkownik nie musi klikać przycisku w ramach alertu)

Jakieś sugestie, jak mogę to obejść?

Pozdrawiam, Dan

+0

Dlaczego nie można po prostu użyć 'window.onbeforeunload'? Wiem, że to nie jest fantazyjny "div", ale zdecydowanie jest przeznaczony do tego rodzaju rzeczy. – Powerslave

+0

window.onbeforeunload była opcją, ale teraz potrzebuję fantazyjnego div, który wymaga stylizacji. – danyo

+0

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

Odpowiedz

8

Okno blisko wydarzenie jest zwolniony jako ostatniej imprezy. Dlatego po nim nie są uruchamiane inne zdarzenia.

Możesz użyć zdarzenia beforeunload z Jquery, aby pokazać nakładkę na ekranie.

Poniższy link może pomóc: link

+0

Link, który wysłałeś jest * bardzo * pomocne. DZIĘKUJĘ CI! – Ethereal

Powiązane problemy