ServiceWorker - 提供了对服务工作线程的引用
ServiceWorker
是 ServiceWorker API 的接口,提供了对服务工作线程的引用。多个浏览上下文(例如页面,工作线程等)可以与同一服务工作线程相关联,每个都通过独立的 ServiceWorker
对象。
在 ServiceWorkerRegistration.active
属性和 ServiceWorkerContainer.controller
属性中可以使用 ServiceWorker
对象 - 这是已激活并已控制页面(服务工作线程已成功注册,并且已重新加载受控页面。)
向 ServiceWorker
接口调度了一组生命周期事件(install
和 activate
)以及包括 fetch
在内的功能性事件。一个 ServiceWorker
对象具有与其生命周期相关的关联 ServiceWorker.state
。
属性
ServiceWorker
从其父接口 Worker
继承了属性。
ServiceWorker.scriptURL
只读
返回定义为 ServiceWorkerRegistration
一部分的 ServiceWorker
序列化脚本 URL。该 URL 必须与注册 ServiceWorker
的文档具有相同的来源。
ServiceWorker.state
只读
返回服务工作线程的状态。它返回以下值之一:installing
,installed,
activating
,activated
或 redundant
。
事件处理程序
ServiceWorker.onstatechange
只读
一个 EventListener
,每当触发 statechange
类型的事件时就会调用。它基本上是在 ServiceWorker.state
更改时触发的。
方法
ServiceWorker
接口从其父接口 Worker
继承了方法,但 Worker.terminate
除外 — 服务工作者不应访问此方法。
更多实例
此代码段来自服务工作线程注册事件实例(在线演示)。该代码监听 ServiceWorker.state
中的任何更改并返回其值。
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('service-worker.js', {
scope: './'
}).then(function (registration) {
var serviceWorker;
if (registration.installing) {
serviceWorker = registration.installing;
document.querySelector('#kind').textContent = 'installing';
} else if (registration.waiting) {
serviceWorker = registration.waiting;
document.querySelector('#kind').textContent = 'waiting';
} else if (registration.active) {
serviceWorker = registration.active;
document.querySelector('#kind').textContent = 'active';
}
if (serviceWorker) {
// logState(serviceWorker.state);
serviceWorker.addEventListener('statechange', function (e) {
// logState(e.target.state);
});
}
}).catch (function (error) {
// 注册时出了点问题。 service-worker.js 文件可能不可用或包含语法错误。
});
} else {
// 当前的浏览器不支持服务工作线程。
}
规范
规范 | 状态 | 备注 |
---|---|---|
Service Workers ServiceWorker 的定义 |
工作草案 | 初始定义。 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
onstatechange | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
scriptURL | 40 | 17 16 | 441 | 不支持 | 27 | 11.1 |
state | 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 |
onstatechange | 40 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
scriptURL | 40 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
state | 40 | 40 | 未知 | 44 | 未知 | 27 | 11.3 |
1. 在 Firefox 45 和 52 扩展支持版本(ESR)中,服务 worker(和 Push)已被禁用。