Нужно ли показывать уведомление в ответ на push-уведомление, если мой сайт находится на переднем плане и в фокусе?

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

Я знаю, что мой сайт всегда должен отображать уведомление при обработке push-события, но могу ли я пропустить отображение уведомления, если мой сайт открыт, как указано выше, и имеет фокус?

Также возможно ли определить вышеуказанные вещи при принятии решения о том, показывать ли уведомление?


person owencm    schedule 08.03.2016    source источник


Ответы (1)


Оказывается, вам не нужно показывать уведомление, если ваш сайт виден.

Это может быть реализовано следующим образом:

self.addEventListener('push', event => {
    return clients.matchAll({ type: 'window' }).then(clients => {
        for (let i = 0; i < clients.length; ++i) {
            if (clients[i].visibilityState === 'visible')
                return;  // there is a visible window
        }

        // continue with showing a notification
    });
});
person owencm    schedule 08.03.2016
comment
Я успешно использовал это до недавнего времени; теперь я вижу странную ошибку Failed to execute 'waitUntil' on 'ExtendableEvent': The event handler is already finished. - at clients.matchAll.then.clients в дополнение к этому сайту был обновлен в фоновом режиме. уведомления. - person Ruben Martinez Jr.; 12.01.2017
comment
Можете ли вы зарегистрировать проблему на crbug.com с фрагментом кода, который вы используете? Это довольно удивительно! - person owencm; 02.02.2017