如果Safari上的CacheStorage已满,则以编程方式清除它

时间:2019-02-15 16:24:05

标签: safari progressive-web-apps

Safari的PWA限制为50 MB。没关系。我的PWA没达到极限,但是到了更新的时候,它将达到极限。在更新开始之前,我先注销ServiceWorker并删除CacheStorage。这是两个函数:

// delete/unregister the service worker
function serviceWorkerDelete() {
    navigator.serviceWorker.getRegistrations().then(function(registrations) {
        for (var r = 0; r < registrations.length; r++) {
            registrations[r].unregister();
            console.log(registrations[r]);
        }
        console.log("data delete and service worker unregister");
    });
}

// clear the CacheStorage
function cacheDelete() {
    caches.keys().then(function(keyList) {
        return Promise.all(keyList.map(function(key) {
            return caches.delete(key);
        }));
    })
}

在Chrome,Firefox和Edge上效果很好,但在Safari上效果不佳。即使在重新加载Safari之后,也认为PWA达到了50 MB的限制。我知道我可以清除“设置”>“ Safari”>下的“缓存”,依此类推,但目标是用户不应该自己执行此操作。这可能吗?除了注销服务工作者并删除缓存存储,还有其他解决方案吗?谢谢!

更新#1: atm cache.delete don't work for Safari on iOS。重新启动浏览器后,Mac上的Safari可以识别它。

0 个答案:

没有答案