Serviceworker中的后台同步未触发事件

时间:2018-12-18 02:38:08

标签: javascript synchronization service-worker offline-caching service-worker-events

我的同步事件未触发,正在使用 chrome网站服务器 localhost:5000 上的台式机上提供页面,并使用访存API将数据发布到本地开发服务器位于单独的端口 localhost:1337 上。已关闭我的wifi,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 :(得分:0)

ServiceWorker中的窗口对象不可用