2013-05-14 16 views
11

Ich bin gerade dabei festzustellen, wenn ein Benutzer meiner Website das Fenster/Tab schließt oder die URL ändert.Javascript auf Fenster schließen Ereignis

ich den follwoing Code verwenden, die perfekt funktioniert:

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

Mein Problem ist, ich mag die Veranstaltung aus einer Warnung zu einem Overlay ändern. Ich habe Setup eine versteckte div Overlay und ersetzt den Alarm in dem obigen Code mit:

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

Dies jetzt nicht mehr funktioniert, da gibt es nichts in der div den Benutzer zu erhalten auf der Seite zu bleiben. (Der Benutzer muss nicht auf eine Schaltfläche innerhalb einer Warnung klicken)

Irgendwelche Vorschläge, wie ich das umgehen kann?

Cheers, Dan

+0

Warum verwenden Sie einfach Sie nicht 'window.onbeforeunload'? Ich weiß, es ist kein schickes "Div", aber es ist definitiv für diese Art von Sachen gedacht. – Powerslave

+0

window.onbeforeunload war eine Option, aber jetzt brauche ich ein schickes div, das Styling benötigt. – danyo

+0

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

Antwort

8

Das Fenster schließen Ereignis wird als letztes Ereignis ausgelöst. Daher werden keine weiteren Ereignisse danach ausgelöst.

Sie können das beforeunload-Ereignis mit Jquery verwenden, um das Overlay auf dem Bildschirm anzuzeigen.

kann mit folgendem Link helfen: link

+0

Der Link, den Sie gepostet haben, ist * extrem * hilfreich. DANKE! – Ethereal

Verwandte Themen