2016-09-28 29 views
0

Ich versuche, ein Popup (Bootstrap-modalen Stil) zu implementieren, die ausgelöst werden würde, wie Web-Besucher meine Website verlässt.EventListener für beforeunload entfernen

Ich habe versucht, verschiedene Alternativen:

$(window).bind('beforeunload', function(){ 
$("#sModal").modal('show'); 
return 'Take our survey before you leave.'; 
}); 

Es ist jedoch nicht im IE in FF während gearbeitet funktionierten. Ich hatte auch ein anderes Problem, dass die Warnung "Möchten Sie gehen oder bleiben" bei jedem Link angezeigt wurde, klicken Sie auf meine Website selbst, über alle Browsertypen, als die ganze Seite geladen wurde.

Ich habe um diese durch durch alle meine Anker-Tags Looping und das Hinzufügen eines Klick-Listener mit dem beforeunload Zuhörer zu entfernen:

window.onload = function() { 
    var allLinks = document.getElementsByTagName('a'); 
    for (var i = 0; i < allLinks.length; i++) { 
     allLinks[i].addEventListener("click", removeBeforeUnload, false); 
    } 
}; 

Die removeBeforeUnload Funktion verwendet nur die

$(window).unbind('beforeunload'); 

zu Kommen wir zurück tatsächlich das Popup/Modal auf allen Browsern angezeigt, ich habe den Code aus dieser Stackoverflow-Antwort verwendet, nachdem mein Dokument Laden abgeschlossen:

window.onbeforeunload and window.onunload is not working in Firefox , Safari , Opera?

Diese Lösung funktioniert in allen Browsern hervorragend, aber jetzt kann ich dieses Ereignis nicht mehr auf einem meiner lokalen geklickten Links lösen! Ich habe alles versucht

window.removeEventlistener('beforeunload',null,false); 
window.removeEventlistener('onbeforeunload',null,false); 
window.removeBeforeUnload(); 
window.onbeforeunload = null; 

Ich hoffe, dass Sie mich in die richtige Richtung zeigen kann und erklären, warum ich dieses Ereignis nicht lösen kann, dass ich von Stackoverflow answer.thanks verwendet!

+0

So viel wie ich hasse dich Entladeverzeichnis Ereignis modal für die Verwendung, das ist eine gute Frage weil ich das gleiche Problem hatte, das nahe Ereignis in einem Browser zu erfassen, ohne die Aktualisierung, zurück usw. zu erfassen. –

+0

@SterlingArcher Thanks! Ich hoffe, dass ich das lösen kann, weil ich auf dem Schreibtisch stehe! Ich weiß nicht, warum die Ereignis-Listener nicht abgemeldet werden !? – mmokh

+0

Ich würde vorschlagen, entweder mit jQuery-Stil 'bind/unbind' (eigentlich sollte diese' on/off' in neueren Versionen von jQuery sein), oder einfach DOM-Stil 'addEventListener/removeEventListener' Semantik. Die Kombination führt zum Wahnsinn :). –

Antwort

0

Ein Gedanke ist, verwenden Sie eine globale Variable Flag und nichts in der Unload-Ereignishandler tun, wenn Flag nicht truthy ist. Setzen Sie dieses Flag auf null oder falsch in Link klicken Handler

Dann haben Sie nicht wirklich den Hörer entfernen müssen

var doUnload = true; 

$('a').click(function(){ 
    doUnload = false; 
}); 

function unloadhandler(){ 
    if(doUnload){ 
     // show modal , return message etc 
    }else{ 
     // do nothing , don't return anything 
    }  
} 
+0

Diese Lösung funktioniert hervorragend im IE, wo interne Website-Links bereinigt und Popup nur beim Beenden/Schließen angezeigt wird. In FF werden jedoch die internen Links bereinigt, beim Beenden/Schließen wird die Warnung "Möchten Sie diese Website verlassen" jedoch nicht mehr angezeigt alles zusammen ... das Popup wird nur für Millisekunden angezeigt, bevor es umgeleitet oder geschlossen wird ... – mmokh

+0

Was bedeutet interne Links sind bereinigt? – charlietfl

+0

es bedeutet, sie nicht das Popup beim Klicken auf interne Website-Links – mmokh

Verwandte Themen