Служебное событие 'sync' не работает на IOS, как сохранить автономные данные в indexedDB? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь создать автономную версию сайта для PWA и застрял с проблемой.Событие 'sync' для работника сервиса прекрасно работает на Android и на рабочем столе, но не работает на IOS.Мой код init здесь.

        if ('serviceWorker' in navigator) {
            navigator.serviceWorker.register('${appDns!}/serviceWorker.js?v=${appVersion!}')
                    .then(function() {
                        return navigator.serviceWorker.ready
                    })
                    .then(function (registration) {
                        if (registration.sync) {
                            registration.sync.register('offline-sync')
                                    .then(function () {
                                    })
                                    .catch(function (err) {
                                        console.error('Service workers sync problem.', err);

                                    });
                        }
                    })
                    .catch(function (err) {
                        console.info('Service workers "register" is not supported.');
                        return err;
                    });
}

, но на IOS registration нет sync, а метод sync в сервисном работнике не срабатывает

    self.addEventListener('sync', event => {
        console.log('SYNC!!!!!!!!!! event:', event);
        return event.waitUntil(syncDataForOffline().catch(e => console.error("syncDataForOffline: ", e)));
    });

Возможно, кто-то знает обходной путь, как хранить данные в indexedBD для IOS.

.

1 Ответ

2 голосов
/ 24 мая 2019

Один из вариантов - использовать workbox-background-sync.

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

В обоих случаях он использует IndexedDB «под капотом» для хранения сериализованной версии неисправной Request.

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