Реагируйте. JS подтверждение только при закрытии вкладки / браузера, но не при обновлении - PullRequest
0 голосов
/ 22 марта 2020

Можно ли получить предупреждение / подтверждение только при закрытии вкладки / браузера? Каждый раз, когда я обновляю страницу / получаю оповещение, появляется это подтверждение, и я не хочу, чтобы оно действовало так. Я создал булеву переменную State - если это правда - должно появиться подтверждение, false - не должно:

render(){
        window.addEventListener("beforeunload", (ev) => 
        {  
          if(this.state.hasChanged===true)
           {
                ev.preventDefault();
                return ev.returnValue = 'Are you sure you want to close?';
           }
}

Я также попытался:

render(){
        window.addEventListener("beforeunload", (ev) => 
        {  
            console.log(performance)
            if((performance.navigation.type!==1)&&(this.state.hasChanged===true))
            {
                ev.preventDefault();
                return ev.returnValue = 'Are you sure you want to close?';
        }
        });
}

Спасибо!

Ответы [ 3 ]

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

Мне кажется, я понимаю вопрос. Если вы пытаетесь отобразить сообщение до того, как пользователь покинет страницу, вы можете использовать событие, найденное в объекте окна, называемое onbeforeunload. Вы можете найти документ об этом в MDN (ссылка ниже). Надеюсь, это поможет.

https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload

Это можно использовать для отправки сообщений «Вы уверены, что хотите покинуть».

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

-Удачи!

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

@ Даво, как он сказал, лучше всего манипулировать локальным хранилищем. Поэтому, если пользователь заходит на вашу страницу, добавьте нужный элемент localStorage. Вы могли бы даже сделать это в формате времени, так что вы можете иметь срок его действия. Вы также можете проверять токен на каждой отображаемой странице, чтобы убедиться, что у пользователя есть токен. Таким образом, если у пользователя есть тот же токен, который вы создали, вы можете оттуда управлять своим состоянием. Надеюсь, это поможет!

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

От этого ответа

Способ перед загрузкой работает, вы не можете отличить погоду, это ссылка на страницу sh или закрытие браузера. beforeunload это довольно запутанное событие, избегайте его использования.

Следовательно, для случаев, когда вы имеете дело с сессией, вам следует использовать сессионное хранилище. Объект sessionStorage хранит данные только для одного сеанса (данные удаляются при закрытии вкладки браузера).

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

...