javascript js head - Определение между обновлением и закрытием действий браузера





4 Answers

К сожалению, проверка значения clientY / pageY события, как это предложено некоторыми из ответов здесь, не является надежным способом определить, запускается ли событие unload вследствие того, что пользователь закрыл страницу.

Причина, по которой clientY / pageY отрицателен, когда вы нажимаете кнопку закрытия браузера, заключается в том, что кнопка закрытия расположена над верхней частью документа (то есть над пикселем 0), но также кнопка перезагрузки означает, что нажатие кнопки перезагрузки также приведет к отрицательное значение для clientY / pageY .

Переход по пути проверки x координаты события также проблематичен, поскольку кнопка закрытия браузера не всегда находится в правой части окна (например, она находится слева в OS X) и потому, что окно можно закрыть закрыв вкладку или с помощью клавиатуры.

title get document

Когда мы обновляем страницу (F5 или значок в браузере), она сначала запускает событие ONUNLOAD. Когда мы закроем браузер (значок X справа), он запустит событие ONUNLOAD. Теперь, когда запускается событие ONUNLOAD, нет возможности различать обновление страницы или закрытие браузера. Если у вас есть какое-то решение, то дайте мне.




Я просто попробовал это, и он решил проблему: создайте объект sessionStorage, который будет уничтожен, когда пользователь закроет браузер. Мы можем проверить объект sessionStorage, чтобы узнать, закрыл ли пользователь браузер или обновил страницу (объект sessionStorage не будет уничтожен при обновлении страницы).




Его рабочее решение

export class BootstrapComponent implements OnInit {

  validNavigation = 0;

  constructor(
    private auth: AuthenticationService
  ) { }

  ngOnInit() {
    const self = this;
    self.registerDOMEvents();
  }

  registerDOMEvents() {
    const self = this;
    window.addEventListener('unload', () => {
      if (self.validNavigation === 0) {
        self.endSession();
      }
    });
    document.addEventListener('keydown', (e) => {
      const key = e.which || e.keyCode;
      if (key === 116) {
        self.validNavigation = 1;
      }
    });
  }

  endSession() {
    const self = this;
    self.auth.clearStorage();
  }
}



Мое предыдущее решение работало для меня в IE. window.event будет неопределенным для браузеров, отличных от IE, поскольку «событие» определено глобально в IE, в отличие от других браузеров. Вам нужно будет указать событие в качестве параметра в случае других браузеров. Также, что clientX не определен для firefox, мы должны использовать pageX.

Попробуйте что-то вроде этого .... должен работать для IE и firefox ...

<html>
<body>
<script type="text/javascript">

window.onunload = function(e) {
// Firefox || IE
e = e || window.event;

var y = e.pageY || e.clientY;

if(y < 0)  alert("Window closed");
else alert("Window refreshed");

}
</script>
</body>
</html>





Related