Получить ответ пользователя на событие beforeunload, если пользователь покидает домен

У меня есть приложение AngularJS, и я использую следующий код, чтобы позволить пользователю подтвердить, действительно ли он хочет покинуть страницу и может потерять несохраненные данные:

window.addEventListener('beforeunload', function (e) {
    e.preventDefault();
    e.returnValue = '';
    return 'Do you really want to leave?'
});

window.addEventListener('unload', function (e) {
    console.log('unload');
    myRestService.close();
    e.preventDefault();
    e.returnValue = '';
});

Это работает хорошо, и браузер отображает окно сообщения, в котором пользователь должен решить, уйти или остаться на странице. Однако, если пользователь действительно хочет покинуть страницу, я должен сделать вызов серверной части отдыха. Для этого я подумал, что я также могу зарегистрироваться для события выгрузки, которое запускается, когда пользователь фактически покидает заднюю часть. Это работает, если пользователь перезагружает заднюю часть или переходит по другому URL-адресу в приложении. Однако событие не запускается или, по крайней мере, я его не вижу, когда пользователь переходит на другую страницу или закрывает браузер.

Как я могу также поймать эти события и убедиться, что мой вызов на отдых все еще проходит?


person Fischer Ludrian    schedule 25.09.2018    source источник


Ответы (1)


Вы можете вызвать функцию перед закрытием вкладки следующим образом:

$window.onbeforeunload = function (arg) {
  $scope.onclose();
}

и теперь вы можете использовать все остальные API в закрытой функции

для получения более подробной информации и других методов следуйте эта ссылка

person Amrit    schedule 25.09.2018
comment
Ну, это также будет вызвано, если пользователь решит остаться на странице. Или не будет? - person Fischer Ludrian; 25.09.2018
comment
нет, не будет. Это подтверждение ухода с текущей страницы. Но если пользователь не покидает страницу, вы можете сделать что-то еще, чтобы сделать вызов для отдыха, например, используя метод ожидания, или использовать тайм-аут, или вы можете позвонить по любому другому событию и т. д. - person Amrit; 25.09.2018
comment
Хм, извините, я все еще не понимаю этого точно. В приведенном выше коде я вижу, что вызываю onclose, когда пользователь собирается покинуть страницу. Но я хочу вызвать свой REST API только тогда, когда пользователь ответит на окно подтверждения, которое затем появится с YES. Если пользователь остается на странице, я не хочу делать вызов REST. Может быть, вы можете привести более полный пример? - person Fischer Ludrian; 25.09.2018