Web编程技术营地
研究、演示、创新

Unregistration

撰写时间:2024-12-29

修订时间:2024-12-30

检测浏览器是否支持

if (! 'serviceWorker' in navigator) { throw new Error('Your browser does not support service worker.'); } pc.log(navigator.serviceWorker);

清除注册

为避免之前的注册所带来的负面影响,可先清除之前的所有注册。下面的代码先清除注册后,再查看当前是否还有注册的项目。

async function unRegAll() { return navigator.serviceWorker.getRegistrations() .then(regs => { let promises = []; for (let reg of regs) { pc.log('Find a registration, schedule to unregister...'); promises.push(reg.unregister()); } return promises; }) .then((promises) => { if (promises.length > 0) { return Promise.all(promises) .then((dones) => { pc.log('All previous registrations have been unregistered.'); return 'done'; }); } else { pc.log('Find no previous registrations.'); return 'done'; } }); } async function listAll() { let registrations = await navigator.serviceWorker.getRegistrations(); if (registrations.length !== 0) { registrations.forEach(registration => pc.log(registration)); } else { pc.log('Currently no registrations.'); } } let status = await unRegAll(); pc.log(status); await listAll();

Service workers大量使用了异步机制,因此为确保清除注册在先,上面两个函数均用await进行了先后排序。

调用serviceWorkergetRegistrations返回所有的注册,然后取出每一个registration,调用其unregister方法来取消注册。

注意,当客户端取消注册后,为使其生效,需等待使用该服务的所有客户端(包括取消注册的客户端)都关闭相应提供ServiceWorker服务的网页后,才会生效。在开发阶段,最简单的方法是关闭浏览器,再重新打开浏览器并访问相应资源。

参考资源

Specifications

  1. Service Workers (W3C CR Draft)
  2. unregister

MDN

  1. Service Workers (gitee)
  2. Service Worker API
  3. Cache