ServiceWorkerGlobalScope

Baseline 广泛可用 *

此功能已成熟,可跨多种设备和浏览器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能仅在 Service Workers 中可用。

ServiceWorkerGlobalScope 接口是 Service Worker API 的一部分,代表了 service worker 的全局执行上下文。

开发者应注意,ServiceWorker 的状态在终止/重启周期之间不会持久化,因此每个事件处理程序都应假设它是以一个干净的、默认的全局状态被调用的。

一旦成功注册,service worker 在空闲时会被终止以节省内存和处理器资源。活动 service worker 会被自动重启以响应事件,例如 fetchmessage

此外,不允许在 service worker 中进行同步请求 — 只能使用异步请求,例如通过 fetch() 方法发起的请求。

此接口继承自 WorkerGlobalScope 接口,以及其父接口 EventTarget

EventTarget WorkerGlobalScope ServiceWorkerGlobalScope

实例属性

此接口继承了 WorkerGlobalScope 接口及其父接口 EventTarget 的属性。

ServiceWorkerGlobalScope.clients 只读

包含与 service worker 关联的 Clients 对象。

ServiceWorkerGlobalScope.cookieStore 只读

返回一个指向与 service worker 关联的 CookieStore 对象的引用。

ServiceWorkerGlobalScope.registration 只读

包含表示 service worker 注册的 ServiceWorkerRegistration 对象。

ServiceWorkerGlobalScope.serviceWorker 只读

包含表示 service worker 的 ServiceWorker 对象。

实例方法

此接口继承了 WorkerGlobalScope 接口及其父接口 EventTarget 的方法。

ServiceWorkerGlobalScope.skipWaiting()

允许当前 service worker 注册在 service worker 客户端使用它时,从等待状态 progression 到活动状态。

事件

使用 addEventListener() 侦听此事件,或将事件监听器分配给此接口的 oneventname 属性。

activate

ServiceWorkerRegistration 获得一个新的 ServiceWorkerRegistration.active worker 时触发。

backgroundfetchabort 实验性

当一个 后台获取操作被用户或应用程序取消时触发。

backgroundfetchclick 实验性

当用户点击 后台获取操作的 UI 时触发。

backgroundfetchfail 实验性

后台获取操作中的至少一个请求失败时触发。

backgroundfetchsuccess 实验性

后台获取操作中的所有请求都成功时触发。

canmakepayment 实验性

在支付应用程序的 service worker 上触发,以检查其是否已准备好处理付款。具体来说,当商家网站调用 PaymentRequest() 构造函数时触发。

contentdelete 实验性

ContentIndex 中的一项被移除时触发。

cookiechange

当发生与 service worker 的 cookie 更改订阅列表匹配的 cookie 更改时触发。

fetch

当调用 fetch() 时触发。

install

ServiceWorkerRegistration 获得一个新的 ServiceWorkerRegistration.installing worker 时触发。

message

当收到传入消息时触发。受控页面可以使用 MessagePort.postMessage() 方法向 service worker 发送消息。

messageerror

当传入消息无法反序列化时触发。

notificationclick

当用户点击已显示的通知时触发。

notificationclose

当用户关闭已显示的通知时触发。

paymentrequest 实验性

当通过 PaymentRequest.show() 方法在商家网站上启动支付流程时,在支付应用程序上触发。

sync

当从 service worker 客户端页面调用 SyncManager.register 时触发。同步尝试会立即进行(如果网络可用),或在网络可用时尽快进行。

periodicsync 实验性

在注册 PeriodicSyncManager 时指定的周期性间隔触发。

push

当收到服务器推送通知时触发。

pushsubscriptionchange

当推送订阅已失效或即将失效时触发(例如,当推送服务设置了到期时间时)。

示例

此代码片段来自 service worker prefetch 示例(请参阅 prefetch 示例在线演示。) onfetch 事件处理程序侦听 fetch 事件。当触发时,代码返回一个 promise,该 promise 解析为 Cache 对象中的第一个匹配请求。如果未找到匹配项,代码将从网络获取响应。

代码还处理了从 fetch() 操作中抛出的异常。请注意,HTTP 错误响应(例如 404)不会触发异常。它将返回一个正常的响应对象,其中包含相应的错误代码。

js
self.addEventListener("fetch", (event) => {
  console.log("Handling fetch event for", event.request.url);

  event.respondWith(
    caches.match(event.request).then((response) => {
      if (response) {
        console.log("Found response in cache:", response);

        return response;
      }
      console.log("No response found in cache. About to fetch from network…");

      return fetch(event.request).then(
        (response) => {
          console.log("Response from network is:", response);

          return response;
        },
        (error) => {
          console.error("Fetching failed:", error);

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

规范

规范
Service Workers
# serviceworkerglobalscope-interface

浏览器兼容性

另见