> Как отправить состояние при закрытии страницы браузера? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: elirox
Стек: JavaScript
> Пример ответа
Для отправки состояния при закрытии страницы используйте событие beforeunload или unload в сочетании с navigator.sendBeacon(). Этот метод гарантирует отправку данных даже при закрытии вкладки, так как работает асинхронно и не блокирует завершение работы браузера.
Пример реализации:
JAVASCRIPTwindow.addEventListener('beforeunload', function(event) {const data = { state: 'сохранено', timestamp: Date.now() };// Отправляем данные через sendBeaconnavigator.sendBeacon('/api/save-state', JSON.stringify(data));// Если нужно показать диалог подтверждения (необязательно)event.preventDefault();event.returnValue = '';});
Ключевые моменты:
navigator.sendBeacon()- предпочтительный метод, так как он не зависит от жизненного цикла страницы и гарантирует доставку.beforeunloadсрабатывает при закрытии вкладки, перезагрузке или переходе по ссылке.- Избегайте
XMLHttpRequestилиfetchвunload, так как они могут быть отменены браузером. - Для критичных данных (например, аналитика) используйте
sendBeaconс типомBlobили строкой JSON.
Альтернатива с fetch (менее надёжна):
JAVASCRIPTwindow.addEventListener('unload', function() {fetch('/api/save', {method: 'POST',body: JSON.stringify({ state: 'final' }),keepalive: true // важно для завершения запроса});});
Но sendBeacon проще и надёжнее.
> Похожие задачи по frontend
В каком порядке срабатывают события при нажатии на кнопку и почему
Как в SSR составляется состояние для рендера?
Как создаются переменные в JavaScript?
В чем разница между async function и обычной функцией в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью