Angular 6: Попытка сделать синхронный вызов (удалить) при событии закрытия браузера (перед событием загрузки / выгрузки браузера) - PullRequest
0 голосов
/ 04 марта 2020

На самом деле, я хочу обновить флаг в Db, используя служебный вызов (метод Delete), как только пользователь закроет браузер. Я могу обнаружить закрытие браузера с помощью событий onbeforeunload и onunload, но вызов asyn c не работает для меня (иногда в режиме отладки он работает нормально, но при более высоких значениях env это не работает).

Затем я попытался сделать запрос syn c, но потом обнаружил, что Chrome теперь запрещает синхронный XHR во время закрытия страницы, когда пользователь перемещается по странице или закрывается от нее. проверьте ссылку: https://www.chromestatus.com/feature/4664843055398912

Я попробовал новый XMLHttpRequest() как syn c, загрузите api также Navigator.sendBeacon(), но, к сожалению, у меня ничего не работает.

Пожалуйста, предложите что-нибудь, что работает, потому что я посетил очень много постов, но у меня ничего не работает.

Заранее спасибо.

1 Ответ

0 голосов
/ 04 марта 2020

У меня есть какое-то решение для этого. Надеюсь, что любой из них решит вашу проблему.

constructor() {
    window.onbeforeunload = ()=>{
      //call API here
    }
  }

В конструкторе компонентов напишите код выше

ИЛИ

На мой взгляд, лучшая идея заключается в том, чтобы сделать API сердцебиения, который отправляет запросы каждые N секунд, чтобы уведомить сервер о том, что сеанс активен и пользователь находится в сети. На сервере каждые M минут проверяйте, не было ли запросов сердцебиения более N секунд: если это так - выполняйте запрос API (то, что вы хотели выполнить на cra sh).

ИЛИ

«beforeunload» будет запускаться при обновлении страниц, закрытии вкладки или закрытии браузера.

  @HostListener('window:beforeunload', ['$event'])
    beforeUnload(e: Event) {
        e.returnValue = false;
    }

ИЛИ

Невозможно обеспечить что каждый раз, когда пользователь выходит из страницы браузера, срабатывает указанная c функция. Причина в том, что браузер может закрыть окно по многим причинам. Да, это может быть действие пользователя, но это не единственный случай. Например, браузер может обработать sh.

. В моем случае мне нужно будет найти другую стратегию для отслеживания времени пребывания пользователя на странице. Например, я планирую отправить много вызовов API, прежде чем пользователь завершит работу со всей информацией, необходимой для понимания его пребывания на странице. Я обновлю ответ, когда найду хорошее решение. В любом случае, я все еще буду ждать лучших ответов.

...