Évidemment, window.onbeforeunload a rencontré son lot de problèmes avec Chrome, comme je l’ai vu parmi tous les problèmes que j’ai rencontrés. Quel est le dernier travail autour?
La seule chose que j'ai près de travailler est this :
window.onbeforeunload = function () { return "alert" };
Toutefois, si je remplace "alerte" par "Alerte" ("blah"), je ne reçois rien de Chrome.
J'ai vu dans cette question que Google le bloquait délibérément. Bon pour eux ... mais que se passe-t-il si je souhaite passer un appel AJAX à la fermeture de la fenêtre? Dans mon cas, je veux savoir quand quelqu'un a quitté la salle de discussion sur mon site Web, signalé par la fermeture de la fenêtre.
Je veux savoir s'il y a un moyen de soit
(a): corrige l'appel window.onbeforeunload afin que je puisse mettre AJAX dedans
ou
(b): obtenir un autre moyen de déterminer la fermeture d'une fenêtre dans Chrome
Réponse:
$(window).on('beforeunload', function() {
var x =logout();
return x;
});
function logout(){
jQuery.ajax({
});
return 1+3;
}
Un peu de mix and match, mais cela a fonctionné pour moi. Le 1 + 3 s'assure que la fonction de déconnexion est appelée (vous verrez 4 si le message est affiché avec succès lorsque vous essayez de partir).
Voici une approche plus simple.
$(window).on('beforeunload', function() {
return "You should keep this page open.";
});
Le message renvoyé peut être ce que vous voulez, y compris la chaîne vide, si vous n'avez rien à ajouter au message que Chrome affiche déjà. Le résultat ressemble à ceci:
Selon MDN ,
La fonction doit affecter une valeur de chaîne à la propriété returnValue de l'objet Event et renvoyer la même chaîne.
Ceci est la suivante
window.addEventListener( 'beforeunload', function(ev) {
return ev.returnValue = 'My reason';
})
Depuis le 69.0.3497.92, Chrome n’est pas conforme à la norme. Cependant, un rapport de bogue a été déposé et un review est en cours.
window.addEventListener('beforeunload', function (e) {
// Cancel the event as stated by the standard.
e.preventDefault();
// Chrome requires returnValue to be set.
e.returnValue = '';
});
window.location = 'about:blank';