ServiceWorkerRegistration - 表示对服务工作线程注册的管理
ServiceWorkerRegistration
是 ServiceWorker API 的接口,表示对服务工作线程注册的管理。您可以注册一个服务工作线程来控制共享相同源的一个或多个页面。
浏览器维护了一个活跃的 ServiceWorkerRegistration
对象的持久列表。
注意:Web Workers 中提供了此功能。
属性
还从其父接口 EventTarget
继承了属性。
ServiceWorkerRegistration.scope
只读
返回服务工作线程注册的唯一标识符。该地址必须与注册 ServiceWorker
的文档的来源相同。
ServiceWorkerRegistration.installing
只读
返回状态为 installing
的服务工作线程。初始值为 null
。
ServiceWorkerRegistration.waiting
只读
返回状态为 installed
的服务工作线程。初始值为 null
。
ServiceWorkerRegistration.active
只读
返回状态为 activating
或 activated
的服务工作线程。初始值为 null
。如果客户端的 URL 在注册范围内(第一次调用 ServiceWorkerContainer.register
时设置的 scope
选项),则活动的工作线程将控制 ServiceWorkerClient
)
ServiceWorkerRegistration.navigationPreload
只读
返回与当前服务工作线程注册关联的 NavigationPreloadManager
的实例。
ServiceWorkerRegistration.pushManager
只读
返回对 PushManager
接口的引用,用于管理推送订阅,包括订阅,获取活动订阅和访问推送许可状态。
ServiceWorkerRegistration.sync
只读
返回对 SyncManager
接口的引用,该接口管理后台同步过程。
未实现属性
serviceWorkerRegistration.periodicSync
只读
返回对 PeriodicSyncManager
接口的引用,该接口管理周期性的后台同步过程。在某些时候,SW 解释器中曾提到过这个想法,但至今尚未在任何地方实现。
事件处理程序
ServiceWorkerRegistration.onupdatefound
只读
一个 EventListener
属性,每当触发 updatefound
类型的事件时,就会调用;只要 ServiceWorkerRegistration.installing
属性获得新的服务工作线程,就会触发该事件。
方法
还从其父接口 EventTarget
继承了方法。
ServiceWorkerRegistration.getNotifications()
返回一个 Promise
,解析为 Notification
对象数组。
ServiceWorkerRegistration.showNotification()
显示带有指定标题的通知。
ServiceWorkerRegistration.update()
在不查询缓存的情况下,检查服务器是否有服务工作线程的更新版本。
ServiceWorkerRegistration.unregister()
注销服务工作线程的注册,并返回一个 Promise
。服务工作线程将在注销之前完成所有正在进行的操作。
实例
在此实例中,代码首先检查浏览器是否支持服务工作线程,如果支持,则进行注册。接下来,它添加一个 updatefound
监听器,该监听器在其中使用服务工作线程注册来监听对服务工作线程状态的进一步更改。如果服务工作线程自上次注册以来从未更改过,则不会触发 updatefound
事件。
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(function(registration) {
registration.addEventListener('updatefound', function() {
// 如果 updatefound 被触发,则意味着正在安装新的服务程序。
var installingWorker = registration.installing;
console.log('正在安装新的服务工作线程:',
installingWorker);
// 您可以通过 installWorker.onstatechange 监听对安装服务工作线程状态的更改。
});
})
.catch(function(error) {
console.log('服务人员线程失败:', error);
});
} else {
console.log('不支持服务工作线程。');
}
规范
规范 | 状态 | 备注 |
---|---|---|
Service Workers ServiceWorkerRegistration 的定义 |
工作草案 | 初始定义。 |
Push API PushManager 的定义 |
工作草案 | 添加 pushManager 属性。 |
Notifications API | 现行的标准 | 添加 showNotification() 和 getNotifications() 方法。 |
Web Background Synchronization | 现行的标准 | 添加 sync 属性。 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
active | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
getNotifications | 40 | 17 16 | 461 | 不支持 | 27 | 11.1 |
installing | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
navigationPreload | 59 | 17 16 | 441 | 不支持 | 46 | 11.1 |
onupdatefound | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
paymentManager | 56 | 未知 | 未知 | 不支持 | 支持 | 未知 |
periodicSync | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |
pushManager | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
scope | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
showNotification | 40 | 17 16 | 461 | 不支持 | 27 | 不支持 |
sync | 49 | 未知 | 不支持 | 不支持 | 36 | 不支持 |
unregister | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
update | 4523 | 17 16 | 441 | 不支持 | 3245 | 11.1 |
updateViaCache | 68 | 18 | 57 | 不支持 | 支持 | 11.1 |
waiting | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 40 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
active | 40 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
getNotifications | 不支持 | 40 | 未知 | 46 | 未知 | 27 | 11.3 |
installing | 40 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
navigationPreload | 59 | 59 | 未知 | 44 | 未知 | 43 | 11.3 |
onupdatefound | 40 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
paymentManager | 支持 | 56 | 未知 | 未知 | 未知 | 支持 | 未知 |
periodicSync | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
pushManager | 不支持 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
scope | 40 | 40 | 未知 | 44 | 未知 | 27 | 不支持 |
showNotification | 40 | 40 | 未知 | 46 | 未知 | 27 | 不支持 |
sync | 49 | 49 | 未知 | 不支持 | 未知 | 36 | 不支持 |
unregister | 40 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
update | 4523 | 4523 | 未知 | 44 | 未知 | 3245 | 不支持 |
updateViaCache | 68 | 68 | 未知 | 57 | 未知 | 支持 | 支持 |
waiting | 40 | 40 | 未知 | 44 | 未知 | 27 | 不支持 |
1. 在 Firefox 45 和 52 扩展支持版本(ESR)中,服务 worker(和 Push)已被禁用。
2. 从 Chrome 46 开始,update()
返回一个 promise
,如果操作成功完成或没有更新,则以解析为 undefined
,如果更新失败,则拒绝。如果新工作程序运行但安装失败,则承诺仍会解析。之前,它会触发一个异常。
3. 在 Chrome 48 之前,此方法始终绕过浏览器缓存。从 Chrome 48 开始,只有在上一个服务工作线程检查超过 24 小时之前,它才会绕过缓存。
4. 从 Opera 33 开始,update()
返回一个 promise
,如果操作成功完成或没有更新,则以解析为 undefined
,如果更新失败,则拒绝。如果新工作程序运行但安装失败,则承诺仍会解析。之前,它会触发一个异常。
5. 在 Opera 35 之前,此方法始终绕过浏览器缓存。从 Opera 35 开始,只有在上一个服务工作线程检查超过 24 小时之前,它才会绕过缓存。