Угловое 2+ обнаружение закрытия окна - PullRequest
0 голосов
/ 03 декабря 2018

У меня проблемы с обнаружением закрывающегося окна после сборка завершена.

const newWindow = window.open(url, '_blank', options);
newWindow.onbeforeunload = () => null;
newWindow.addEventListener('beforeunload', (evt: BeforeUnloadEvent) => 
  {
    console.log(evt)
  }
);

он прекрасно работает, пока я не сделаю сборку, там событие beforeunload не запускается.Я также попытался разместить хост-слушатель в компоненте нового окна:

@HostListener('window:beforeunload', [ '$event' ])
beforeUnloadHander(event: BeforeUnloadEvent): void {
  debugger;
}

, но та же проблема здесь.после того, как сборка завершена, мы больше не приходим к отладчику

Кто-нибудь знает, что я делаю неправильно?спасибо за вашу помощь!

Редактировать обходной путь

const heartBeatNewWindow = setInterval(() => {
  if (newWindow.closed) {
    this.canvasSettings.displayInNewWindow = false;
    clearTimeout(heartBeatNewWindow);
  }
}, 1500);

1 Ответ

0 голосов
/ 03 декабря 2018

Мне пришлось сделать нечто подобное, и мой подход был следующим: я создал общий улов из окон закрытых событий в конструкторе моего сервиса, они вызывают метод, который обрабатывает это событие.Внутри этого метода я проверяю источник этого события, чтобы правильно выполнить необходимую логику.Посмотрите этот пример:

Внутри конструктора:

  if(window.addEventListener){
     window.addEventListener("message", this.authService.handleMessage.bind(this), false);
  }else{
     (<any>window).attachEvent('onmessage', this.authService.handleMessage.bind(this));
}

И мой метод для обработки этого события:

handleMessage(event: Event) {
      event.preventDefault();
      const message = event as MessageEvent;

        // Only trust messages from the below origin.
        //
        if ((message.origin !== environment.BASE_URL)) return;

      const result = JSON.parse(message.data);

//Add your logic here

Надеюсь, будет полезным.

...