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)已被禁用。