我使App Cache能够正常工作以使Web应用程序具有脱机功能,但我的任务是切换到服务人员,因为一些主要的浏览器威胁到随时可能会放弃对应用程序缓存的支持。我能够使服务人员正常工作,但是当使用带有应用程序缓存的应用程序的最终用户设备无法加载新的服务人员而不必手动清除浏览器缓存(在设置中)时,就会出现问题。
Service Worker版本非常适合从未与应用程序缓存版本一起使用过该应用程序或手动清除了缓存的任何设备。
设置服务工作者以强制更改应用程序缓存版本时,我应该做些什么吗?
该应用程序使用ASP.NET,服务工作者代码位于每页包含的Global.master中。
Global.master
--------------------------------------------------
if ('serviceWorker' in navigator)
{
navigator.serviceWorker
.register('/Service_Worker.js')
.then(function (registration)
{
console.log("Service Worker Registered");
})
.catch(function (err)
{
console.log("Service Worker registration failed");
});
}
else
{
console.log('service worker not supported.');
}
Service_Worker.js
--------------------------------------------------
self.addEventListener('install', function (e)
{
self.skipWaiting();
e.waitUntil(
caches.open(cacheName).then(function (cache)
{
return cache.addAll(appShellFiles);
})
);
});
// Fetching content using Service Worker
self.addEventListener('fetch', function (e)
{
e.respondWith(
caches.match(e.request).then(function (r)
{
return r || fetch(e.request).then(function (response)
{
return caches.open(cacheName).then(function (cache)
{
cache.put(e.request, response.clone());
return response;
});
});
})
);
});
self.addEventListener('activate', function (e)
{
e.waitUntil(
caches.keys().then(function (keyList)
{
return Promise.all(keyList.map(function (key)
{
if (cacheName.indexOf(key) === -1)
{
return caches.delete(key);
}
}));
})
);
});
预期结果:运行应用程序缓存的设备应在应用程序更新后与服务工作者一起使用
实际结果:在先前运行应用程序缓存版本的设备的缓存被清除之前,它将继续从先前版本的缓存中运行客户端代码。