Как включить диспетчер синхронизации в electron?

#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: Фоновая синхронизация отключена.