This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The Clients
interface provides access to Client
objects. Access it via
within a service worker.self
.clients
Methods
Clients.get()
- Returns a
Promise
for aClient
matching a givenid
. Clients.matchAll()
- Returns a
Promise
for an array ofClient
objects. An options argument allows you to control the types of clients returned. Clients.openWindow()
- Opens a new browser window for a given url and returns a
Promise
for the newWindowClient
. Clients.claim()
- Allows an active service worker to set itself as the
controller
for all clients within itsscope
.
Examples
The following example shows an existing chat window or creates a new one when the user clicks a notification.
addEventListener('notificationclick', event => { event.waitUntil(async function() { const allClients = await clients.matchAll({ includeUncontrolled: true }); let chatClient; // Let's see if we already have a chat window open: for (const client of allClients) { const url = new URL(client.url); if (url.pathname == '/chat/') { // Excellent, let's use it! client.focus(); chatClient = client; break; } } // If we didn't find an existing chat window, // open a new one: if (!chatClient) { chatClient = await clients.openWindow('/chat/'); } // Message the client: chatClient.postMessage("New chat messages!"); }()); });
Specifications
Specification | Status | Comment |
---|---|---|
Service Workers The definition of 'Clients' in that specification. |
Editor's Draft | Initial definition |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | 40 | 44.0 (44.0)[1] | No support | 27 | No support |
Feature | Android Webview | Chrome for Android | Firefox Mobile (Gecko) | Firefox OS | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | 40 | 40 | 44.0 (44.0) | (Yes) | No support | 27 | No support |
[1] Service workers (and Push) have been disabled in the Firefox 45 & 52 Extended Support Releases (ESR.)
See also
Document Tags and Contributors
Tags:
Contributors to this page:
jpmedley,
jaffathecake,
chrisdavidmills,
nmve,
Sebastianz,
fscholz,
teoli,
Meggin
Last updated by:
jpmedley,