ServiceWorkerContainer
接口在
服务工作者 API
provides an object representing the service worker as an overall unit in the network ecosystem, including facilities to register, unregister and update service workers, and access the state of service workers and their registrations.
Most importantly, it exposes the
ServiceWorkerContainer.register()
method used to register service workers, and the
ServiceWorkerContainer.controller
property used to determine whether or not the current page is actively controlled.
ServiceWorkerContainer.controller
只读
ServiceWorker
object if its state is
activated
(the same object returned by
ServiceWorkerRegistration.active
). This property returns
null
during a force-refresh request (
Shift
+ refresh) or if there is no active worker.
ServiceWorkerContainer.ready
只读
Promise
that will never reject, and which waits indefinitely until the
ServiceWorkerRegistration
associated with the current page has an
ServiceWorkerRegistration.active
worker. Once that condition is met, it resolves with the
ServiceWorkerRegistration
.
controllerchange
ServiceWorkerRegistration
acquires a new
active
worker.
ServiceWorkerContainer.oncontrollerchange
特性。
error
ServiceWorkerContainer.onerror
特性。
message
ServiceWorkerContainer
object (e.g. via a
MessagePort.postMessage()
call.)
ServiceWorkerContainer.onmessage
特性。
ServiceWorkerContainer.register()
ServiceWorkerRegistration
为给定
scriptURL
.
ServiceWorkerContainer.getRegistration()
ServiceWorkerRegistration
object whose scope matches the provided document URL. The method returns a
Promise
解析为
ServiceWorkerRegistration
or
undefined
.
ServiceWorkerContainer.getRegistrations()
ServiceWorkerRegistration
objects associated with a
ServiceWorkerContainer
in an array. The method returns a
Promise
that resolves to an array of
ServiceWorkerRegistration
.
ServiceWorkerContainer.startMessages()
Client.postMessage()
). This can be used to react to sent messages earlier, even before that page's content has finished loading.
The example below first checks to see if the browser supports service workers. If supported, the code registers the service worker and determines if the page is actively controlled by the service worker. If it isn't, it prompts the user to reload the page so the service worker can take control. The code also reports any registration failures.
if ('serviceWorker' in navigator) {
// Register a service worker hosted at the root of the
// site using the default scope.
navigator.serviceWorker.register('/sw.js').then(function(registration) {
console.log('Service worker registration succeeded:', registration);
// At this point, you can optionally do something
// with registration. See ../API/ServiceWorkerRegistration
}).catch(function(error) {
console.log('Service worker registration failed:', error);
});
// Independent of the registration, let's also display
// information about whether the current page is controlled
// by an existing service worker, and when that
// controller changes.
// First, do a one-off check if there's currently a
// service worker in control.
if (navigator.serviceWorker.controller) {
console.log('This page is currently controlled by:', navigator.serviceWorker.controller);
}
// Then, register a handler to detect when a new or
// updated service worker takes control.
navigator.serviceWorker.oncontrollerchange = function() {
console.log('This page is now controlled by:', navigator.serviceWorker.controller);
};
} else {
console.log('Service workers are not supported.');
}
| 规范 | 状态 | 注释 |
|---|---|---|
|
服务工作者
The definition of 'ServiceWorkerContainer' in that specification. |
工作草案 | 初始定义。 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
ServiceWorkerContainer
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
controller
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
getRegistration
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
getRegistrations
|
Chrome 45 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 45 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
message
event
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
oncontrollerchange
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
onerror
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
onmessage
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
onmessageerror
|
Chrome 不支持 No | Edge 不支持 17 — 79 | Firefox Yes | IE 不支持 No | Opera ? | Safari Yes | WebView Android 不支持 No | Chrome Android 不支持 No | Firefox Android Yes | Opera Android ? | Safari iOS Yes | Samsung Internet Android 不支持 No |
ready
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
register
|
Chrome 40 |
Edge
17
|
Firefox
44
注意事项
|
IE 不支持 No | Opera 27 | Safari 11.1 | WebView Android 40 | Chrome Android 40 | Firefox Android 44 | Opera Android 27 | Safari iOS 11.3 | Samsung Internet Android 4.0 |
startMessages
|
Chrome 74 | Edge ≤79 | Firefox 64 | IE 不支持 No | Opera 62 | Safari Yes | WebView Android 74 | Chrome Android 74 | Firefox Android 64 | Opera Android 50 | Safari iOS Yes | Samsung Internet Android 11.0 |
完整支持
不支持
兼容性未知
实验。期望将来行为有所改变。
见实现注意事项。
用户必须明确启用此特征。
ServiceWorkerContainer