ServiceWorkerGlobalScope - 表示服务工作线程的全局执行上下文

ServiceWorkerGlobalScopeServiceWorker API 的接口,表示服务工作线程的全局执行上下文。

开发人员应记住,ServiceWorker 状态不会在终止 / 重新启动周期中保持不变,因此每个事件处理程序都应该假设它是用一个缺省的全局状态来调用的。

成功注册后,服务工作线程可以并且将在空闲时被终止,以节省内存和处理器电量。活动的服务工作线程会自动重新启动以响应事件,例如 ServiceWorkerGlobalScope.onfetchServiceWorkerGlobalScope.onmessage

另外,服务工作线程内部不允许同步请求 - 只能使用异步请求,例如通过 fetch() 方法启动的异步请求。

此接口继承自 WorkerGlobalScope 接口及其父级 EventTarget,因此实现了 WindowTimersWindowBase64WindowEventHandlers

属性

ServiceWorkerGlobalScope.clients 只读

包含与服务工作线程相关联的 Clients 对象。

ServiceWorkerGlobalScope.registration 只读

包含 ServiceWorkerRegistration 对象,该对象代表服务工作线程的注册。

ServiceWorkerGlobalScope.caches 只读

包含与服务工作者相关联的 CacheStorage 对象。

Events

activate

ServiceWorkerRegistration 获取新的 ServiceWorkerRegistration.active 工作线程时发生。也可以通过 ServiceWorkerGlobalScope.onactivate 属性处理。

fetch

在调用 fetch() 时发生。也可以通过 ServiceWorkerGlobalScope.onfetch 属性处理。

install

ServiceWorkerRegistration 获得新的 ServiceWorkerRegistration.installing 工作线程时发生。也可以通过 ServiceWorkerGlobalScope.oninstall 属性处理。

message

在收到传入消息时发生。受控页面可以使用 MessagePort.postMessage() 方法将消息发送给服务工作线程。服务工作线程可以选择通过 MessagePort 中公开的 event.data.port 发送回响应,对应于受控页面。也可以通过 ServiceWorkerGlobalScope.onmessage 属性处理。

notificationclick

当用户单击显示的通知时发生。也可以通过 ServiceWorkerGlobalScope.onnotificationclick 属性处理。

notificationclose

当用户关闭显示的通知时发生。也可以通过 ServiceWorkerGlobalScope.onnotificationclose 属性处理。

push

在收到服务器推送通知时发生。也可以通过 ServiceWorkerGlobalScope.onpush 属性处理。

pushsubscriptionchange

当推送订阅已失效或即将失效时发生(例如,当推送服务设置到期时间时)。也可以通过 ServiceWorkerGlobalScope.onpushsubscriptionchange 属性处理。

sync

从服务工作线程客户端页面调用 SyncManager.register 时触发。如果网络可用,则立即尝试同步,或者一旦网络可用,则尝试进行同步。也可以通过 ServiceWorkerGlobalScope.onsync 属性处理。

方法

ServiceWorkerGlobalScope.skipWaiting()

允许当前服务工作线程注册在服务工作线程客户端正在使用时从等待状态变为活动状态。

ServiceWorkerGlobalScope 实现了 WorkerGlobalScope(实现了 WindowOrWorkerGlobalScope)。因此,它还具有以下可用属性:

GlobalFetch.fetch()

开始获取资源的过程。这将返回一个 Promise,该 Promise 将解析为代表对您的请求的响应的 Response 对象。该算法是传递到服务工作线程上下文的获取处理的入口点。

实例

此代码段来自服务工作线程预取实例(请参阅预取在线实例。)ServiceWorkerGlobalScope.onfetch 事件处理程序监听 fetch 事件。触发后,代码返回一个 Promise,该 Promise 将解析为 Cache 对象中的第一个匹配请求。如果未找到匹配项,则代码将从网络获取响应。

该代码还处理从 fetch() 操作引发的异常。注意,HTTP 错误响应(例如 404)不会触发异常。它将返回具有适当错误代码集的普通响应对象。

self.addEventListener('fetch', function(event) {
  console.log('处理的提取事件', event.request.url);

  event.respondWith(
    caches.match(event.request).then(function(response) {
      if (response) {
        console.log('在缓存中找到响应:', response);

        return response;
      }
      console.log('在缓存中找不到响应。即将从网络获取...');

      return fetch(event.request).then(function(response) {
        console.log('来自网络的响应是:', response);

        return response;
      }, function(error) {
        console.error('提取失败:', error);

        throw error;
      });
    })
  );
});

规范

规范 状态 备注
Service Workers
ServiceWorkerGlobalScope 的定义
工作草案 初始定义

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持40 未知441 不支持2411.1
activate 事件40 未知441 不支持2411.1
caches40 未知441 不支持2411.1
clients40 未知441 不支持2411.1
install 事件40 未知441 不支持2411.1
message 事件40 未知441 不支持2411.1
notificationclick 事件40 未知441 不支持2411.1
onabortpayment61 未知 未知 不支持 未知11.1
onactivate40 未知441 不支持2411.1
oncanmakepayment61 未知 未知 不支持 未知 未知
onfetch40 未知441 不支持2411.1
oninstall40 未知441 不支持2411.1
onmessage40 未知441 不支持2411.1
onmessageerror 未知 未知 未知 不支持 未知 未知
onnotificationclick40 未知441 不支持2411.1
onnotificationclose40 未知441 不支持2411.1
onpaymentrequest57 未知 未知 不支持 未知 未知
onpush40 未知441 不支持2411.1
onpushsubscriptionchange40 未知441 不支持2411.1
onsync49 未知441 不支持2411.1
push 事件40 未知441 不支持2411.1
pushsubscriptionchange 事件40 未知441 不支持2411.1
registration40 未知441 不支持2411.1
skipWaiting40 未知441 不支持24 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持4040 未知44 未知2411.3
activate 事件4040 未知44 未知2411.3
caches4040 未知44 未知2411.3
clients4040 未知44 未知2411.3
install 事件4040 未知44 未知2411.3
message 事件4040 未知44 未知2411.3
notificationclick 事件 不支持40 未知44 未知2711.3
onabortpayment 不支持61 未知 未知 未知 未知11.3
onactivate4040 未知44 未知2411.3
oncanmakepayment 不支持61 未知 未知 未知 未知 未知
onfetch4040 未知44 未知2411.3
oninstall4040 未知44 未知2411.3
onmessage4040 未知44 未知2411.3
onmessageerror 未知 未知 未知 未知 未知 未知 未知
onnotificationclick4040 未知44 未知2411.3
onnotificationclose4040 未知44 未知2411.3
onpaymentrequest 不支持57 未知 未知 未知 未知 未知
onpush4040 未知44 未知2411.3
onpushsubscriptionchange4040 未知44 未知2411.3
onsync4949 未知44 未知2411.3
push 事件4040 未知44 未知2411.3
pushsubscriptionchange 事件4040 未知44 未知2411.3
registration4040 未知44 未知2411.3
skipWaiting4040 未知44 未知24 不支持

1. 在 Firefox 45 和 52 扩展支持版本(ESR)中,服务 worker(和 Push)已被禁用。

相关链接