как я могу обновить базу данных при закрытии окна браузера? - PullRequest
5 голосов
/ 19 июня 2020

Я пытаюсь передать несколько видео пользователям, и я хочу, чтобы они могли возобновить просмотр видео, когда они покинут веб-сайт и войдут снова. Насколько мне известно, сохранение времени видео в локальном хранилище браузера и его извлечение, когда они возвращаются, - лучший способ, но в этом случае, когда пользователь входит в систему с другого P C или браузера, время просмотра видео сбрасывается. Поскольку синхронный Ajax теперь отключен в некоторых браузерах, я также не могу сохранить наблюдаемое время в базе данных при закрытии браузера (с использованием событий onunload или beforeunload).

Другой способ, который я пробовал, - , чтобы сэкономить время, когда пользователь нажимает кнопку паузы, например:

var video1 = document.getElementById('video1');

function videoPausePlayHandler(e) {
    if (e.type == 'pause') {
        //saving the watched time in databse using Ajax
    }
}
video1.addEventListener('pause', videoPausePlayHandler, false);

Но опять же, когда пользователь закрывает окно браузера или что-то еще, вместо нажатия кнопки паузы, это не сработает.

Есть ли другой способ для этого?

1 Ответ

3 голосов
/ 19 июня 2020

Вы можете использовать событие onunload браузера и отправить Navigator.sendBeacon для асинхронной отправки вашей отметки времени на сервер, не блокируя закрытие окна браузера пользователем. Документация sendBeacon . Охват браузером выглядит неплохо. Просто старый IE его вообще не поддерживает.

...