我的同步事件未触发,正在使用 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]已就绪-同步已注册”,但是在我将数据脱机发布并重新连接后,没有收到来自同步事件的消息。
答案 0 :(得分:0)
ServiceWorker中的窗口对象不可用