> Как отправить состояние при закрытии страницы браузера? (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: elirox

Стек: JavaScript

> Пример ответа

Для отправки состояния при закрытии страницы используйте событие beforeunload или unload в сочетании с navigator.sendBeacon(). Этот метод гарантирует отправку данных даже при закрытии вкладки, так как работает асинхронно и не блокирует завершение работы браузера.

Пример реализации:

JAVASCRIPT
window.addEventListener('beforeunload', function(event) {
const data = { state: 'сохранено', timestamp: Date.now() };
// Отправляем данные через sendBeacon
navigator.sendBeacon('/api/save-state', JSON.stringify(data));
// Если нужно показать диалог подтверждения (необязательно)
event.preventDefault();
event.returnValue = '';
});

Ключевые моменты:

  • navigator.sendBeacon() - предпочтительный метод, так как он не зависит от жизненного цикла страницы и гарантирует доставку.
  • beforeunload срабатывает при закрытии вкладки, перезагрузке или переходе по ссылке.
  • Избегайте XMLHttpRequest или fetch в unload, так как они могут быть отменены браузером.
  • Для критичных данных (например, аналитика) используйте sendBeacon с типом Blob или строкой JSON.

Альтернатива с fetch (менее надёжна):

JAVASCRIPT
window.addEventListener('unload', function() {
fetch('/api/save', {
method: 'POST',
body: JSON.stringify({ state: 'final' }),
keepalive: true // важно для завершения запроса
});
});

Но sendBeacon проще и надёжнее.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью