5

我的同步事件没有触发,我正在使用chrome 网络服务器在我的桌面 PC 上的localhost:5000上提供一个页面,并使用 fetch 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但没有收到消息,事件没有被触发。

我在其中注册 serviceworker 的 main.js 中的片段

/**  * 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] 已准备好 - 同步已注册”,但在我离线发布数据并重新连接后没有从同步事件中收到消息。

4

1 回答 1

0

窗口对象在 ServiceWorker 中不可用

于 2019-04-25T09:28:40.803 回答