【问题标题】:Remove a specific file from service worker cache?从服务工作者缓存中删除特定文件?
【发布时间】:2020-04-16 02:51:16
【问题描述】:

我编写的代码可以返回给定缓存中不再使用的所有文件的响应,然后将其删除。我已经尝试将cache.delete 与来自cache.matchAll() 的请求一起使用,这是返回错误的请求。

Response {type: "basic" url: "http://127.0.0.1:5500/bundles/bundle-f6d8ec63.css" redirected: false status: 404 ok: false statusText: "Not Found" headers: Headers {} body: (...) bodyUsed: false __proto__: Response }

你可以在这里看到它确实存在于缓存中

看起来 cache.delete 是为了删除整个缓存,但我只想删除一些选择的文件。有没有办法做到这一点?

【问题讨论】:

  • 如果我在浏览器中访问该文件,我可以正常删除它们。情节变厚了……

标签: javascript service-worker browser-cache


【解决方案1】:

您可以使用cache.delete(request, options) 删除缓存中的项目。

此方法在缓存中找到与请求匹配的项目,将其删除,并返回一个解析为 true 的 Promise。如果没有找到该项目,则解析为 false。

以下是 MDN 定义的选项:

ignoreSearch:一个布尔值,指定是否忽略 URL 中的查询字符串。例如,如果将 ?value=bar 部分设置为 true

htt://foo.com/?value=bar

将在执行匹配时被忽略。默认为 false。

ignoreMethod:一个布尔值,当设置为 true 时,会阻止匹配操作验证请求 HTTP 方法(通常只允许 GET 和 HEAD。)默认为 false。

ignoreVary:一个布尔值,当设置为 true 时,告诉匹配操作不执行 VARY 标头匹配 - 也就是说,如果 URL 匹配,无论 Response 对象是否具有 VARY 标头,您都将获得匹配。默认为 false。

cacheName:表示要在其中搜索的特定缓存的 DOMString。请注意,Cache.match() 会忽略此选项。

【讨论】:

  • 我更新了我的问题以解释更多。我试过使用 cache.delete 但它返回 false。
【解决方案2】:

原来我正在使用的测试本地主机(我认为它基于 npm http-server)正在搞乱缓存并且不让我删除东西。使用py -m http.server 进行测试时,我没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2019-05-06
    相关资源
    最近更新 更多