Задать вопрос

Почему beforeunload не отправляет запросы в браузере Safari?

Есть запрос, который при отправке сохраняет данные в базу. Нужно, чтобы когда пользователь обновляет страницу, данные тоже сохранялись. Использую такое событие, как befoureunload. В Chrome и Firefoox всё окей, а вот с Safari беда. Он не обрывает запросы или будто не ждет их завершения и сыпет ошибку "Network Error", из-за чего они не доходят до сервера. Запрос методом POST шлю через axios, пробовал через fetch (понятное дело, одно и то же). Пробовал сделать worker, но опять в Chrome и Firefox работает, а в Safari нет.
  • Вопрос задан
  • 332 просмотра
Подписаться 4 Средний Комментировать
Решения вопроса 2
Lynn
@Lynn
nginx, js, css
Посмотрите на Beacon API. Он как раз предназначен для аналитики.
А обычные запросы браузер имеет полное право обрывать потому что полагает что в нём уже нет никакого смысла раз вы покидаете страницу.

А ещё в MDN прелагают использовать событие visibilitychange вместо beforeunload.
https://developer.mozilla.org/en-US/docs/Web/API/N...
Ответ написан
@shalyginGleb Автор вопроса
Вообщем получилась подобная история рабочая в Safari и во всех остальных браузерах. (для тех кому в дальнейшем это будет интересно)

window.addEventListener('beforeunload', (event) => {
     navigator.sendBeacon("/save", data);
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект