【问题标题】:iOS 12 CacheStorage API gets deleted after browser restartiOS 12 CacheStorage API 在浏览器重启后被删除
【发布时间】:2023-03-17 21:20:02
【问题描述】:

我目前正在为 iOS 开发一个离线网络应用程序。它使用 ServiceWorker 和 CacheStorage API 来离线存储应用程序代码。

在 iOS 11 中,一切正常。 从 iOS 12 开始,每次重启浏览器都会清除 CacheStorage。

我设置了一个关于如何重现这个的小演示: 它向您显示页面/主机上有哪些缓存,然后创建一个包含图片的新缓存。所以下次你访问它时,应该有一个现有的缓存。

  1. 转到https://itoobi.github.io/servicebreaker/
  2. 页面显示“keys: size: 0”(当前为 0 个缓存)
  3. 它会创建一个名为“test”的新缓存并显示“缓存已打开”。
  4. 重新加载页面
  5. 页面现在显示“keys: test size: 1”(1 个缓存存在)(再次“缓存打开”,但这并不重要)
  6. 关闭浏览器(通过在 iOS 任务管理器中关闭它)
  7. 重启浏览器并重新加载页面
  8. 现在应该再次显示“keys: test size: 1”,因为应该有一个现有的缓存。 --> 在 iOS 12 上,页面再次显示“keys: size: 0”。

我在桌面浏览器上进行了测试,包括最新的 Chromium 和 Firefox,它们都可以工作。

使用 iOS 11.4.x Safari,它可以工作。 对于 iOS 12.x(12.0、12.1、12.1 beta 5)Safari,它不起作用。在不同的 iPad 和 iPhone 设备上进行了测试。

所以问题是:有人知道我做错了什么吗,Apple 是否更改了 API,或者这只是 Apple 方面的一个错误? 如果有人有类似的问题,我也会感兴趣,因为我没有找到与此相关的任何内容。


测试页面代码:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>Home Page</title>
 </head>
 <body>
    <script>
        caches.keys().then(function(keys){
            alert("keys: "+keys+" size: "+keys.length);
        });
        caches.open("test").then(function(cache){
            cache.add("mario.png");
            alert("cache opened");
        });
    </script>
  </body>
</html>

【问题讨论】:

  • 听起来您可能正在使用私有实例打开浏览器。如果您在其他浏览器中这样做,这也是他们的行为。我在我的 iPhone 上尝试了它,它可以正常工作,保留缓存的图像。我使用的是 iOS 12.1.3,所以也许这是他们修复的早期错误。

标签: ios service-worker progressive-web-apps ios12 cachestorage


【解决方案1】:

您是否尝试过安装(将其放在主屏幕),也许这会解决它。

【讨论】:

  • 将此作为评论而不是答案。
  • 不,这没有帮助。在 iOS 11 中,它还可以在普通 safari 和 pwa 模式下运行。
猜你喜欢
  • 2015-04-11
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 2014-01-26
  • 1970-01-01
  • 2015-06-13
  • 2019-06-14
相关资源
最近更新 更多