gpt4 book ai didi

service-worker - 注销时如何清除服务人员缓存?

转载 作者:行者123 更新时间:2023-12-05 00:48:59 28 4
gpt4 key购买 nike

热门问题 How do I uninstall a Service Worker? 为使用 JavaScript 取消注册服务 worker 提供了一个很好的答案。如何让服务人员在取消注册时清除任何命名缓存?

来自 MDN unregisterService Worker 将在取消注册之前完成所有正在进行的操作。因此,听起来应该可以监听 uninstall 事件,但不存在这样的事件 as far as I can tell 。对于傻笑,我尝试将 self.addEventListener('uninstall', ...) 添加到服务人员,但正如预期的那样,它没有在取消注册时触发。我还尝试监听可能在取消注册时发送的任何 message...没有骰子。

我也考虑看 service worker state ,但没有 installinginstalledactivatingactivatedredundant 显得相关。更不用说,看起来消息传递给服务 worker 是不可能的,所以我不确定我会如何处理来自服务 worker 外部的 uninstalling 状态。

伸手去拿吸管,虽然我看到了对 uninstalling flag 的引用,但我还没有看到它暴露在任何地方。有什么建议吗?

最佳答案

以下代码应取消注册所有服务 worker 并清除缓存存储 API 中的所有内容:

async function unregisterAndClearCaches() {
const registrations = await navigator.serviceWorker.getRegistrations();
const unregisterPromises = registrations.map(registration => registration.unregister());

const allCaches = await caches.keys();
const cacheDeletionPromises = allCaches.map(cache => caches.delete(cache));

await Promise.all([...unregisterPromises, ...cacheDeletionPromises]);
}

使用 Clear-Site-Data header是在单个操作中“强制”清除所有内容(服务 worker 注册、缓存等)的另一种选择。

关于service-worker - 注销时如何清除服务人员缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47358643/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com