InstallEvent - 表示在 ServiceWorker 调度的安装操作

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

InstallEvent 接口是传递给 oninstall 处理程序的参数,表示在 ServiceWorkerServiceWorkerGlobalScope 上调度的安装操作。作为 ExtendableEvent 的子接口,它确保在安装期间不调度诸如 FetchEvent 之类的功能事件。

此接口继承自 ExtendableEvent 接口。

构造函数

InstallEvent.InstallEvent()

创建一个新的 InstallEvent 对象。

属性

从其祖先接口 Event 继承了属性。

InstallEvent.activeWorker 只读

返回当前正在控制页面的 ServiceWorker

方法

从其父接口 ExtendableEvent 继承了方法。

实例

此代码段来自 服务 worker 预取例子(请参阅 预取的在线运行实例。)代码在 ServiceWorkerGlobalScope.oninstall 中调用 ExtendableEvent.waitUntil() 并延迟处理 ServiceWorkerRegistration.installing 安装的 worker,直到传递的 promise 成功解析。在获取和缓存所有资源或发生任何异常时,promise 将解析。

该代码段还显示了服务 worker 使用的版本控制缓存的最佳实践。虽然此示例只有一个缓存,但您可以将此方法用于多个缓存。该代码将缓存的速记标识符映射到特定的版本化缓存名称。

注意:在 Google Chrome 中,通过 chrome://serviceworker-internals 访问的相关服务 worker 的 “Inspect” 界面,可以看到记录的语句。

var CACHE_VERSION = 1;
var CURRENT_CACHES = {
  prefetch: 'prefetch-cache-v' + CACHE_VERSION
};

self.addEventListener('install', function(event) {
  var urlsToPrefetch = [
    './static/pre_fetched.txt',
    './static/pre_fetched.html',
    'https://www.chromium.org/_/rsrc/1302286216006/config/customLogo.gif'
  ];

console.log('处理安装事件。预取资源:', urlsToPrefetch);

  event.waitUntil(
    caches.open(CURRENT_CACHES['prefetch']).then(function(cache) {
      cache.addAll(urlsToPrefetch.map(function(urlToPrefetch) {
        return new Request(urlToPrefetch, {mode: 'no-cors'});
      })).then(function() {
        console.log('已获取并缓存所有资源。');
      });
    }).catch(function(error) {
      console.error('预获取失败:', error);
    })
  );
});

规范

规范 状态 备注
Service Workers 编者的草案 在 2015 年 5 月之前,install 事件是 ExtendableEvent 的一个实例,而不是它的子接口。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持40 未知441 不支持27 不支持
InstallEvent() constructor.40 未知441 不支持27 不支持
activeWorker40 未知441 不支持27 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持4040 未知44 未知27 不支持
InstallEvent() constructor.4040 未知44 未知27 不支持
activeWorker4040 未知44 未知27 不支持

1. Firefox 45 和 52 扩展支持版本(ESR)中已禁用服务 worker(和推送)。

相关链接