Window.onbeforeunload в Chrome: какое последнее исправление?
Очевидно, что window.onbeforeunload обнаружил свою долю проблем с Chrome, как я видел из всех проблем, с которыми я столкнулся. Какая самая последняя работа вокруг?
Единственное, что у меня даже близко работает: this:
window.onbeforeunload = function () { return "alert" };
Однако, если я заменяю возвращаемое "предупреждение" каким-то напоминанием ( "бла" ), я ничего не получаю от Chrome.
Я видел в этом вопросе, что Google целенаправленно блокирует это. Хорошо для них... но что, если я хочу сделать вызов AJAX, когда кто-то закрывает окно? В моем случае я хочу знать, когда кто-то покинул чат на моем веб-сайте, и сигнализировал о закрытии окна.
Я хочу знать, есть ли способ либо
(a): исправьте window.onbeforeunload вызов, чтобы я мог разместить AJAX там
или
(b): получите другой способ определить, что окно закрылось в Chrome
Ответы
Ответ 1
Ответ:
$(window).on('beforeunload', function() {
var x =logout();
return x;
});
function logout(){
jQuery.ajax({
});
return 1+3;
}
Немного микса и матча, но это сработало для меня. 1 + 3 гарантирует, что вызывается функция выхода (вы увидите 4, если она удалась во всплывающем окне, когда вы пытаетесь уйти).
Ответ 2
Здесь более простой подход.
$(window).on('beforeunload', function() {
return "You should keep this page open.";
});
Возвращаемое сообщение может быть любым, включая пустую строку, если вам нечего добавить в сообщение, которое уже показывает Chrome. Результат выглядит следующим образом:
![enter image description here]()
Ответ 3
Согласно MDN,
Функция должна назначать значение строки для свойства returnValue объекта Event и вернуть ту же строку.
Это следующее
window.addEventListener( 'beforeunload', function(ev) {
return ev.returnValue = 'My reason';
})
Ответ 4
По состоянию на 69.0.3497.92 Chrome не соответствовал стандарту. Тем не менее, имеется отчет об ошибке, и проверка продолжается.
- Chrome требует, чтобы returnValue устанавливалось путем ссылки на объект события, а не на значение, возвращаемое обработчиком.
- Стандарт гласит, что запросом можно управлять, отменяя событие или устанавливая возвращаемое значение в ненулевое значение.
- Стандарт гласит, что авторам следует использовать Event.preventDefault() вместо returnValue.
- Стандарт гласит, что сообщение, отображаемое пользователю, не настраивается.
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';