Как проверить, сфокусировано ли окно Chrome? - PullRequest
0 голосов
/ 05 февраля 2020

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

self.addEventListener('push', function(event) {
  event.waitUntil(clients.matchAll().then(function(clientList) {
    for (let i = 0; i < clientList.length; i++) {
      if (clientList[i].visibilityState === "visible") { // if any window is visible, don't send a notification
        return;
      }
    }

    event.waitUntil(self.registration.showNotification("Notification"));
  })
}

Это работает нормально, за исключением того факта, что если пользователь вкладывается в мой сайт, но с вкладками из браузера, то это не работает. Я составлю таблицу:

user is tabbed into site                            notification not sent    CORRECT
user is not tabbed into site                        notification is sent     CORRECT
user is not tabbed into site or browser             notification is sent     CORRECT
user is tabbed into site but tabbed out of browser  notification not sent    INCORRECT

Можно ли исправить последний случай? Я хочу отправить уведомление в этом случае.

1 Ответ

0 голосов
/ 13 февраля 2020

Будет ли visibilitychange событие работать для вас?

Вы можете добавить его в свои простые javascript файлы, а затем отправить почтовое сообщение работнику сервиса, когда видимость изменится

<script type="text/javascript">
    document.addEventListener("visibilitychange", function() {
        if (document.visibilityState === 'visible') {
            console.log('IS VISIBLE');
        } else {
            console.log('NOT VISIBLE');
            let meg = {...some message object}
            swRegistration.active.postMessage(msg);
        }
    });

</script>
...