ServiceWorkerGlobalScope
注意: 此功能仅在Service Workers 中可用。
ServiceWorkerGlobalScope
是 Service Worker API 的一个接口,它代表服务工作者的全局执行上下文。
开发人员应牢记,ServiceWorker 状态不会在终止/重启循环中持久保存,因此每个事件处理程序都应假设它是在没有全局状态的情况下被调用的。
成功注册后,服务工作者可以在空闲时被终止,以节省内存和处理能力。一个活动的 service worker 会自动重新启动以响应事件,例如 fetch
或 message
。
此外,服务工作者内部不允许使用同步请求——只能使用异步请求,例如通过 fetch()
方法发起的请求。
此接口继承自 WorkerGlobalScope
接口,其父级为 EventTarget
。
实例属性
此接口继承自 WorkerGlobalScope
接口,其父级为 EventTarget
。
ServiceWorkerGlobalScope.clients
只读-
包含与服务工作者关联的
Clients
对象。 -
返回与服务工作者关联的
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
中删除项目时发生。 -
当与服务工作者的 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)不会触发异常。它将返回一个正常的响应对象,其中设置了相应的错误代码。
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 表格仅在浏览器中加载