{{SeeCompatTable}}{{APIRef("Service Workers API")}}
The Client
interface of the ServiceWorker API represents the scope of a service worker client. A service worker client is either a document in a browser context or a {{domxref("SharedWorker")}}, which is controlled by an active worker. A client object acts as a snapshot representation of its associated service worker client in the scope of a service worker.
Client
is still under development (see issue 414 and issue 423).
Methods
- {{domxref("Client.postMessage()")}}
- Allows a service worker to send a message to a
ServiceWorkerClient
.
Properties
- {{domxref("Client.frameType")}} {{readonlyInline}}
- Indicates the type of browsing context of the current client. This value can be one of
auxiliary
,top-level
,nested
, ornone
. - {{domxref("Client.id")}} {{readonlyInline}}
- Returns the universally unique identifier of the
Client
object. - {{domxref("Client.url")}} {{readonlyInline}}
- The URL of the current service worker client.
Examples
This code is based on a snippet taken from the service worker post-message sample (see post-message live.) The code sends message data to which the service worker can reply via {{domxref("Client.postMessage()")}}.
The message is wrapped in a promise that resolves if the response doesn't contain an error and rejects with the error.
// service worker client (e.g. a document) function sendMessage(message) { return new Promise(function(resolve, reject) { // note that this is the ServiceWorker.postMessage version navigator.serviceWorker.controller.postMessage(message); window.serviceWorker.onMessage = function(e) { resolve(e.data); }); }); } // controlling service worker self.addEventListener("message", function(e) { // e.source is a client object e.source.postMessage("Hello! Your message was: " + e.data); });
Specifications
Specification | Status | Comment |
---|---|---|
{{SpecName('Service Workers', '#client', 'Client')}} | {{Spec2('Service Workers')}} | Initial definition. |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | {{CompatChrome(40.0)}} | {{CompatVersionUnknown}}[1] {{ CompatGeckoDesktop("44.0") }}[2] |
{{CompatNo}} | {{CompatUnknown}} | {{CompatNo}} |
Feature | Android | Firefox Mobile (Gecko) | Firefox OS | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | {{CompatUnknown}} | {{CompatVersionUnknown}}[1] {{ CompatGeckoMobile("44.0") }}[2] |
{{CompatUnknown}}[3] | {{CompatNo}} | {{CompatUnknown}} | {{CompatNo}} | {{CompatUnknown}} |
- [1]: In Firefox, go to
about:config
and setdom.serviceWorkers.enabled
totrue
; restart browser. In Firefox you can also disable https-only checks by settingdom.serviceWorkers.testing.enabled
totrue
. - [2]: Service workers have been turned on in Firefox by default as of Gecko 44.
- [3]: In Firefox OS you can enable the prefs using the WebIDE tool by going to Other > Device Preferences; bear in mind that you also need to disable devtools restricted privileges.
Chrome Notes
The frameType
property is not supported Chrome {{CompatChrome(43.0)}}.