Я читал и искал это и нашел варианты (например, по клику), но не для перезагрузки/обновления браузера, которые работают.
По сути, я хочу, чтобы когда пользователь перезагружает, обновляет или F5 в браузере, вместо обычного подтверждения предупреждения появляется всплывающее диалоговое окно с предупреждением, спрашивающее пользователя, хотят ли они обновить, теряя любую информацию, которую они просмотрели, с OK /Отмена.
В моем контроллере у меня есть это:
$scope.$on('$destroy', function() {
window.onbeforeunload = undefined;
});
window.onbeforeunload = function (e) {
e.preventDefault();
SweetAlert.swal({
title: "I display correctly but....",
text: "before page refreshes and do not wait for user to click ok",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",confirmButtonText: "Ok",
cancelButtonText: "Cancel",
closeOnConfirm: true,
closeOnCancel: true },
function(isConfirm){
if (isConfirm) {
console.log('do something...')
}
});
return undefined;
};
$scope.$on('$locationChangeStart', function( event, toState, toParams, fromState, fromParams) {
SweetAlert.swal({
title: "I display and wait for the user to click but too late",
text: "...after the page refreshes",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",confirmButtonText: "Ok",
cancelButtonText: "Cancel",
closeOnConfirm: true,
closeOnCancel: true },
function(isConfirm){
if (isConfirm) {
console.log('do something...')
}
});
});
Часть «window.onbeforeunload» загружается в нужное время (до перезагрузки/обновления страницы), но не ожидает выбора пользователя.
Часть "$scope.$on('$locationChangeStart',..." загружается слишком поздно (после перезагрузки/обновления страницы), но ожидает выбора пользователя.
Помимо «$ locationChangeStart», я также пробовал «$ stateChangeStart» и «$ routeChangeStart», но безрезультатно.
Что мне не хватает, чтобы сделать эту работу? Любая помощь или направление будет принята с благодарностью.