CacheStorage.keys()

Experimental

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

CacheStorage 接口的 keys() 方法返回一个 Promise对象,它使用一个数组resolve,该数组包含 CacheStorage 对象按创建顺序跟踪的所有命名 Cache  对象对应的字符串。使用此方法迭代所有 Cache 对象。

语法

caches.keys().then(function(keyList) {
  //对keyList做操作
});

返回

一个使用 CacheStorage 对象中 Cache 名称数组resolve的 Promise 

参数

无。

示例

在此代码片段中,我们监听activate (en-US) 事件,然后运行一个 waitUntil() 方法,该方法在新的 service worker 被激活之前清除老的、无用的cache。 这里我们设置一个包含缓存名称的白名单。 通过使用 keys()方法 来返回CacheStorage 对象中的keys集合,然后检查缓存key是否在白名单中,如果不存在,则使用 CacheStorage.delete 方法来删除该缓存。

then.addEventListener('activate', function(event) {
  var cacheWhitelist = ['v2'];

  event.waitUntil(
    caches.keys().then(function(keyList) {
      return Promise.all(keyList.map(function(key) {
        if (cacheWhitelist.indexOf(key) === -1) {
          return caches.delete(key);
        }
      });
    })
  );
});

规范

Specification Status Comment
Service Workers
CacheStorage
Working Draft Initial definition.

浏览器兼容

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support 40 (Yes) 44 (44)[1] 未实现 27 未实现
Feature Android Webview Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 40 40 44.0 (44) (Yes) 27 (Yes)

[1] Service workers (and Push) have been disabled in the Firefox 45 & 52 Extended Support Releases (ESR.)

亦可参考