Javascript - открыть вкладку браузера после нажатия уведомления работника службы на устройстве Android - PullRequest
0 голосов
/ 24 сентября 2018

Я создаю веб-приложение для ресторана и дошел до того, что мои Уведомления дают мне знать, когда принят новый заказ.Рабочий процесс приложения:

1) Официант входит в систему через Android Chrome для проверки ожидающих билетов
2) Клиент регистрирует билет, используя другое устройство
3) Уведомление отображается на устройстве официанта

До этого момента все работало нормально.Что я хочу знать: есть ли способ щелкнуть Уведомление во время использования другого приложения (или при просмотре главного экрана), чтобы открыть Chrome на соответствующей вкладке (где официант вошел в систему)?

Здесьмой код:

App.js

var n = _registration.showNotification('Menú',{
     body: 'Tienes un nuevo pedido',
     requireInteration: true,
});

Работник службы

self.addEventListener('notificationclick', function(event) {
    let url = 'https://example.com/some-path/';
    event.preventDefault();

    event.notification.close(); // Android needs explicit close.
    event.waitUntil(
        clients.matchAll({type: 'window'}).then( windowClients => {
            // Check if there is already a window/tab open with the target URL
            for (var i = 0; i < windowClients.length; i++) {
                var client = windowClients[i];
                // If so, just focus it.
                if (client.url === url && 'focus' in client) {
                    return client.focus();
                }
            }
            // If not, then open the target URL in a new window/tab.
            if (clients.openWindow) {
                return clients.openWindow(url);
            }
        })
    );
});

Это прекрасно работает снастольный браузер, но поскольку официант использует телефон на базе Android, этого будет недостаточно.Спасибо.

1 Ответ

0 голосов
/ 22 февраля 2019

Для меня client.focus() также не работает, но когда я нажимаю на уведомление - оно на самом деле фокусирует мое приложение.И разница в моем коде в том, что у меня нет event.preventDefault();

...