Да, это возможно.
В прослушивателе событий push
в вашем скрипте Service Worker вы можете получить всех клиентов этого Service Worker, вызвав self.clients.matchAll()
, который возвращает обещание, которое разрешится с помощьюмассив клиентских объектов. Эти клиентские объекты можно проверить на свойство focused
. Если свойство focused
равно true
, это означает, что браузер имеет фокус на вкладке.
Затем, в зависимости от того, какого типа клиентов вы получаете, вы можете как-то изменить уведомление или полностью отменить его. То, что вы описываете, вероятно, будет означать, что в случае сфокусированного клиента вы бы вместо показа уведомления отправляли сообщение через postMessage API
, а код переднего конца отображал пользовательское «уведомление» в приложении.
Пример здесь: https://serviceworke.rs/push-clients_service-worker_doc.html