#javascript #electron #service-worker
#javascript #электрон #сервис-работник #electron
Вопрос:
Я создаю автономную кросс-платформу с использованием electron. Он использует сотрудника службы поддержки, чтобы сначала перевести приложение в автономный режим. Когда я пытаюсь зарегистрировать диспетчер синхронизации с помощью следующей команды:-
swRegistration.sync.register('myFirstSync')
Ожидаемое поведение
На странице с зарегистрированным сотрудником службы этот фрагмент не должен выдавать ошибок.
navigator.serviceWorker.ready.then(function(swRegistration) {
return swRegistration.sync.register('myFirstSync');
});
Фактическое поведение
При запуске с electron я получаю
Uncaught (in promise) DOMException: Background Sync is disabled.
Мне нужно включить диспетчер синхронизации. Есть идеи о том, как это можно сделать?
Комментарии:
1. какова ваша электронная версия?
2. У меня есть electron 8.2.2
3. Эта ошибка исходит от средства визуализации?
4. И это для добавления push-уведомления?
5. Существует существующая проблема с electron — github.com/electron/electron/issues/9802
Ответ №1:
Согласно developers.google.com
Вам просто нужно следовать этой статье, которая находится на их веб-сайте, и вы можете увидеть ее на сайте, нажав здесь.
Это статья:
Как запросить фоновую синхронизацию
В истинно расширяемом веб-стиле это низкоуровневая функция, которая дает вам свободу делать то, что вам нужно. Вы запрашиваете, чтобы событие запускалось, когда у пользователя есть подключение, которое выполняется немедленно, если у пользователя уже есть подключение. Затем вы прослушиваете это событие и делаете все, что вам нужно.
Подобно push-сообщениям, он использует service worker в качестве цели события, что позволяет ему работать, когда страница не открыта. Для начала зарегистрируйтесь для синхронизации со страницы:
//register your service worker:
navigator.serviceWorker.register('/sw.js')
//then, later, request a one-off sync:
navigator.serviceWorker.ready.then(function(swRegistration) {
return swRegistration.sync.register('myFirstSync');
});
Затем прослушайте событие в /sw.js:
self.addEventListener('sync', function(event) {
if (event.tag == 'myFirstSync') {
event.waitUntil(doSomeStuff());
}
});
И это все! В приведенном выше примере doSomeStuff() должен возвращать обещание, указывающее на успех / неудачу того, что он пытается сделать. Если он выполняется, синхронизация завершена. В случае сбоя будет запланирована повторная попытка другой синхронизации. Повторные попытки синхронизации также ожидают подключения и используют экспоненциальное отключение.
Имя тега синхронизации (‘myFirstSync’ в приведенном выше примере) должно быть уникальным для данной синхронизации. Если вы регистрируетесь для синхронизации, используя тот же тег, что и ожидающая синхронизация, он объединяется с существующей синхронизацией. Это означает, что вы можете регистрироваться для синхронизации «очистить исходящие» каждый раз, когда пользователь отправляет сообщение, но если они отправляют 5 сообщений в автономном режиме, вы получите только одну синхронизацию, когда они станут онлайн. Если вы хотите 5 отдельных событий синхронизации, просто используйте уникальные теги!
Комментарии:
1. Вы неправильно поняли вопрос. Я знаю, как запустить фоновую синхронизацию. Мой вопрос был в том, как мы должны запустить фоновую синхронизацию в electron. Electron должен выдать мне сообщение без перехвата (в обещании) DOMException: Фоновая синхронизация отключена.