Подтвердить что ты не робот

Использование onbeforeunload без диалога?

Я пытаюсь опубликовать данные, когда пользователь покидает мою страницу. Мне наконец-то удалось найти рабочее решение, однако оно показывает диалоговое окно подтверждения, когда пользователь уходит. Я попытался return null; но это не сработало. Можно ли отключить диалог?

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

    return '';
}
4b9b3361

Ответ 1

На странице Mozilla Developer Network:

Когда это событие возвращает не-пустое значение, пользователю предлагается подтвердите разгрузку страницы.

Это означает, что возвращаемое значение обработчика должно быть undefined (не '', false или null), чтобы избежать запуска запроса подтверждения.

window.onbeforeunload = function() {

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

  return undefined;
}

В javascript вы можете полностью отказаться от возвращаемого значения, чтобы получить тот же результат.

В coffeescript с jquery это что-то вроде

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

Ответ 2

Если вы хотите отключить диалог, напишите

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

вместо

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

Надеюсь, это поможет вам.

Ответ 3

Не могли бы вы проверить это:

$(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');
}

Это создаст много бесполезных запросов, но должно позволить вашему первому запросу достаточно времени для достижения сервера.

Ответ 4

Я нашел очень простой трюк, чтобы заставить это работать с использованием

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

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

});