0

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

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

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

  1. 转到https://itoobi.github.io/servicebreaker/
  2. 该页面显示“键:大小:0”(当前为 0 个缓存)
  3. 它创建一个名为“test”的新缓存并显示“缓存已打开”。
  4. 重新加载页面
  5. 该页面现在显示“键:测试大小: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>
4

1 回答 1

0

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

于 2018-10-31T15:29:17.430 回答