web-dev-qa-db-fra.com

Pourquoi jQuery onbeforeunload ne fonctionne-t-il pas dans Chrome et Firefox?

jQuery onbeforeunload ne fonctionne pas dans Chrome et Firefox. Il fonctionne correctement dans IE et Safari.

jQuery(window).bind('onbeforeunload' ,function () {
    mymethod();
});

Le code ci-dessus fonctionne correctement dans IE et dans Safari mais pas dans Firefox et Chrome.

12
user1990525

Selon la référence window.onbeforeunload de 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.

Observez ce jsFiddle

jQuery(window).bind('beforeunload', function(e) {
    var message = "Why are you leaving?";
    e.returnValue = message;
    return message;
});

Notez que certains événements peuvent être ignorés :

[...] la spécification HTML5 indique que les appels à window.showModalDialog (), window.alert () , window.confirm () et window Les méthodes .Prompt () peuvent être ignorées pendant cet événement.

Une note importante sur AJAX:

Si vous essayez de faire un appel AJAX lorsque l'utilisateur quitte la demande, elle peut être annulée (interrompue) avant la fin. Vous pouvez désactiver l'option async en tant que Par exemple:

$.ajax({
    url: "/",
    type: "GET",
    async: false
});

Mise à jour 2017:

De nombreux navigateurs ne prennent plus en charge le texte personnalisé dans la boîte de dialogue d'alerte lorsque l'utilisateur quitte.

Les dernières versions de Chrome, Firefox, Opera et Safari n'affiche aucun texte personnalisé.

Edge et IE supportent toujours cela.

37
Rowan Freeman