Использование onbeforeunload без диалога?
Я пытаюсь опубликовать данные, когда пользователь покидает мою страницу. Мне наконец-то удалось найти рабочее решение, однако оно показывает диалоговое окно подтверждения, когда пользователь уходит. Я попытался return null;
но это не сработало. Можно ли отключить диалог?
window.onbeforeunload = function() {
$.post("track.php", {
async: false,
refid: refid,
country: country,
type: type,
});
return '';
}
Ответы
Ответ 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,
});
});