我目前正在为 iOS 开发一个离线网络应用程序。它使用 ServiceWorker 和 CacheStorage API 来离线存储应用程序代码。
在 iOS 11 中,一切正常。从 iOS 12 开始,每次重新启动浏览器时,CacheStorage 都会被清除。
我设置了一个关于如何重现此内容的小演示:它向您显示页面/主机上有哪些缓存,然后创建一个包含图片的新缓存。所以下次你访问它时,应该有一个现有的缓存。
- 转到https://itoobi.github.io/servicebreaker/
- 该页面显示“键:大小:0”(当前为 0 个缓存)
- 它创建一个名为“test”的新缓存并显示“缓存已打开”。
- 重新加载页面
- 该页面现在显示“键:测试大小:1”(现有 1 个缓存)(再次“打开缓存”,但这在这里并不重要)
- 关闭浏览器(通过在 iOS 任务管理器中关闭它)
- 重启浏览器并重新加载页面
- 它现在应该再次说“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>