web-dev-qa-db-fra.com

window.onbeforeunload in Chrome: quel est le correctif le plus récent?

É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

22
varatis

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).

14
varatis

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:

enter image description here

3
Keith

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';
})
2
kisp

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.

  • Chrome requiert que returnValue soit défini par référence à l'objet événement, et non à la valeur renvoyée par le gestionnaire.
  • Standard indique que l'invite peut être contrôlée en annulant l'événement ou en définissant la valeur de retour sur une valeur non-null .
  • La norme stipule que les auteurs doivent utiliser Event.preventDefault () au lieu de returnValue.
  • Standard indique que le message affiché à l'utilisateur n'est pas personnalisable.

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';

1
Trevor Karjanis