ServiceWorkerGlobalScope

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,在部分或所有支持的浏览器中可用。

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

ServiceWorkerGlobalScopeService Worker API 的一个接口,它代表服务工作者的全局执行上下文。

开发人员应牢记,ServiceWorker 状态不会在终止/重启循环中持久保存,因此每个事件处理程序都应假设它是在没有全局状态的情况下被调用的。

成功注册后,服务工作者可以在空闲时被终止,以节省内存和处理能力。一个活动的 service worker 会自动重新启动以响应事件,例如 fetchmessage

此外,服务工作者内部不允许使用同步请求——只能使用异步请求,例如通过 fetch() 方法发起的请求。

此接口继承自 WorkerGlobalScope 接口,其父级为 EventTarget

EventTarget WorkerGlobalScope ServiceWorkerGlobalScope

实例属性

此接口继承自 WorkerGlobalScope 接口,其父级为 EventTarget

ServiceWorkerGlobalScope.clients 只读

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

ServiceWorkerGlobalScope.cookieStore 只读 实验性

返回与服务工作者关联的 CookieStore 对象的引用。

ServiceWorkerGlobalScope.registration 只读

包含表示服务工作者注册的 ServiceWorkerRegistration 对象。

ServiceWorkerGlobalScope.serviceWorker 只读

包含表示服务工作者的 ServiceWorker 对象。

实例方法

此接口继承自 WorkerGlobalScope 接口,其父级为 EventTarget

ServiceWorkerGlobalScope.skipWaiting()

允许当前服务工作者注册从等待状态过渡到活动状态,而服务工作者客户端正在使用它。

事件

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

activate

ServiceWorkerRegistration 获取新的 ServiceWorkerRegistration.active 工作者时发生。

backgroundfetchabort 实验性

当用户或应用程序取消 后台提取 操作时触发。

backgroundfetchclick 实验性

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

backgroundfetchfail 实验性

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

backgroundfetchsuccess 实验性

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

canmakepayment 实验性

在支付应用程序的服务工作者上触发,以检查它是否已准备好处理支付。具体而言,当商家网站调用 PaymentRequest() 构造函数时触发。

contentdelete 实验性

ContentIndex 中删除项目时发生。

cookiechange 实验性

当与服务工作者的 cookie 更改订阅列表匹配的 cookie 更改发生时触发。

fetch

当调用 fetch() 时发生。

install

ServiceWorkerRegistration 获取新的 ServiceWorkerRegistration.installing 工作者时发生。

message

当收到传入消息时发生。受控页面可以使用 MessagePort.postMessage() 方法向服务工作者发送消息。

messageerror

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

notificationclick

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

notificationclose

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

paymentrequest 实验性

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

sync

当从服务工作者客户端页面调用 SyncManager.register 时触发。同步尝试要么在网络可用时立即进行,要么在网络可用后尽快进行。

periodicsync 实验性

以定期间隔发生,这些间隔是在注册 PeriodicSyncManager 时指定的。

push

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

pushsubscriptionchange

当推送订阅无效或即将无效时发生(例如,当推送服务设置过期时间时)。

示例

此代码片段来自服务工作者预取示例(请参阅预取示例)。该onfetch事件处理程序监听fetch事件。当触发时,代码返回一个承诺,该承诺解析为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;
        },
      );
    }),
  );
});

规范

规范
服务工作者
# serviceworkerglobalscope-interface

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参见