web-dev-qa-db-fra.com

Utiliser onbeforeunload sans dialogue?

J'essaie de publier des données lorsqu'un utilisateur quitte ma page. J'ai finalement réussi à trouver une solution qui fonctionne. Toutefois, une boîte de dialogue de confirmation s'affiche lorsque l'utilisateur quitte l'application. J'ai essayé return null; mais cela n'a pas fonctionné. Est-il possible de désactiver le dialogue?

window.onbeforeunload = function() {
    $.post("track.php", {
        async: false,
        refid: refid,
        country: country, 
        type: type,
    });

    return '';
}
19
user198989

Depuis la page Mozilla Developer Network

Lorsque cet événement renvoie une valeur non nulle, l'utilisateur est invité à confirmer le déchargement de la page.

Cela signifie que la valeur de retour du gestionnaire doit être undefined (et non '', false ou null) afin d'éviter de déclencher l'invite de confirmation.

window.onbeforeunload = function() {

  $.post("track.php", {
  ...
  });

  return undefined;
}

En javascript, vous pouvez ignorer la valeur de retour pour obtenir le même résultat. 

En coffeescript avec jQuery c'est quelque chose comme

$(document).ready ->
  $(window).bind('beforeunload', ->
    #put your cleanup code here
    undefined
  )
36
meesern

Si vous souhaitez désactiver la boîte de dialogue, écrivez uniquement

window.onbeforeunload = function() { ... return; }

au lieu de

window.onbeforeunload = function() { ... return ''; }.

J'espère que cela vous aidera.

4
Hay Thi

Pourriez-vous tester ceci:

$(window).on('beforeunload', function (e) {
    if (e.originalEvent) $.post("track.php", {
        async: false,
        refid: refid,
        country: country,
        type: type,
    });
    else $.get("", {
        async: false
    });
    $(this).trigger('beforeunload');
}

Cela créera de nombreuses requêtes inutiles mais devrait laisser à votre première requête suffisamment de temps pour atteindre le serveur.

2
A. Wolff

J'ai trouvé un truc très simple pour que cela fonctionne avec l'aide de

$(window).bind('onbeforeunload', function () {

$.post("track.php", {
async: false,
refid: refid,
country: country, 
type: type,
});

});
0
user198989