Фоновая синхронизация не запускает событие в serviceworker - PullRequest
0 голосов
/ 18 декабря 2018

Мое событие синхронизации не сработало, я использую chrome webserver для обслуживания страницы на моем настольном ПК на localhost: 5000 и использую api для извлечения данных POST на локальный сервер разработкина отдельном порту localhost: 1337 .Выключил мой Wi-Fi, веб-сервер Chrome, а также автономный переключатель в Chrome Devtool, но все еще не запускаю мое событие.

Это мой код из фрагмента serviceworker.js для синхронизации

self.addEventListener('sync', function(event) {   
  if (event.tag == 'syncrhronizeOfflineData') 
  {     
    event.waitUntil(syncrhronizeData());   
  } 
}); 
async function syncrhronizeData() {   
  console.log('now synchronizing data...');   
  //first get all favourites in the localDB and post them to server 
  const favData = await window.localforage.getItem('restaurants')
    .filter((r) => r.isoffline );   
  console.log('favdata', favData); 
}

На самом деле еще не опубликовано в базе данных, пытаясь утешить favdata , но не получая сообщение, событие не было инициировано.

Фрагментв main.js, где я регистрирую serviceworker

/**  * Service worker functions below  */ 
registerServiceWorker = () => {    
if (!navigator.serviceWorker) return;    
navigator.serviceWorker.register('/service-worker.js')
.then((reg) => {     
  if (!navigator.serviceWorker.controller) return;     
  if (reg.waiting) {        
    updateWorker(reg.waiting);       
    return;     
  }      
  if (reg.installing) {         
    trackInstalling(reg.installing);       
    return;     
  }      
  reg.addEventListener('updatefound', () => {      
    trackInstalling(reg.installing);     
  });    
}).catch(function(err) {      
  console.error(err); // the Service Worker didn't install correctly   
});    
//background sync for favourites and reviews offline posting   
if ('SyncManager' in window || 'sync' in reg) {   
    navigator.serviceWorker.ready.then(function(swRegistration) { 
    console.log('[ServiceWorker] is ready - sync is registered');        
    return swRegistration.sync.register('syncrhronizeOfflineData');     
 });   
}     
};

Получаю консольное сообщение о том, что ' [ServiceWorker] готово - синхронизация зарегистрирована ', но не получает сообщение отсинхронизировать событие после того, как я опубликовал данные в автономном режиме и снова подключиться.

1 Ответ

0 голосов
/ 25 апреля 2019

объект окна недоступен внутри ServiceWorker

...