docs/api/service-workers.md
Query and receive events from a sessions active service workers.
Process: Main
This class is not exported from the 'electron' module. It is only available as a return value of other methods in the Electron API.
Instances of the ServiceWorkers class are accessed by using serviceWorkers property of
a Session.
For example:
const { session } = require('electron')
// Get all service workers.
console.log(session.defaultSession.serviceWorkers.getAllRunning())
// Handle logs and get service worker info
session.defaultSession.serviceWorkers.on('console-message', (event, messageDetails) => {
console.log(
'Got service worker message',
messageDetails,
'from',
session.defaultSession.serviceWorkers.getFromVersionID(messageDetails.versionId)
)
})
The following events are available on instances of ServiceWorkers:
Returns:
event EventmessageDetails Object - Information about the console message
message string - The actual console messageversionId number - The version ID of the service worker that sent the log messagesource string - The type of source for this message. Can be javascript, xml, network, console-api, storage, rendering, security, deprecation, worker, violation, intervention, recommendation or other.level number - The log level, from 0 to 3. In order it matches verbose, info, warning and error.sourceUrl string - The URL the message came fromlineNumber number - The line number of the source that triggered this console messageEmitted when a service worker logs something to the console.
Returns:
event Eventdetails Object - Information about the registered service worker
scope string - The base URL that a service worker is registered forEmitted when a service worker has been registered. Can occur after a call to navigator.serviceWorker.register('/sw.js') successfully resolves or when a Chrome extension is loaded.
Returns:
details Event<>
versionId number - ID of the updated service worker versionrunningStatus string - Running status.
Possible values include starting, running, stopping, or stopped.Emitted when a service worker's running status has changed.
The following methods are available on instances of ServiceWorkers:
serviceWorkers.getAllRunning()Returns Record<number, ServiceWorkerInfo> - A ServiceWorkerInfo object where the keys are the service worker version ID and the values are the information about that service worker.
serviceWorkers.getInfoFromVersionID(versionId)versionId number - ID of the service worker versionReturns ServiceWorkerInfo - Information about this service worker
If the service worker does not exist or is not running this method will throw an exception.
serviceWorkers.getFromVersionID(versionId) DeprecatedversionId number - ID of the service worker versionReturns ServiceWorkerInfo - Information about this service worker
If the service worker does not exist or is not running this method will throw an exception.
Deprecated: Use the new serviceWorkers.getInfoFromVersionID API.
serviceWorkers.getWorkerFromVersionID(versionId) ExperimentalversionId number - ID of the service worker versionReturns ServiceWorkerMain | undefined - Instance of the service worker associated with the given version ID. If there's no associated version, or its running status has changed to 'stopped', this will return undefined.
serviceWorkers.startWorkerForScope(scope) Experimentalscope string - The scope of the service worker to start.Returns Promise<ServiceWorkerMain> - Resolves with the service worker when it's started.
Starts the service worker or does nothing if already running.
const { app, session } = require('electron')
const { serviceWorkers } = session.defaultSession
// Collect service workers scopes
const workerScopes = Object.values(serviceWorkers.getAllRunning()).map((info) => info.scope)
app.on('browser-window-created', async (event, window) => {
for (const scope of workerScopes) {
try {
// Ensure worker is started
const serviceWorker = await serviceWorkers.startWorkerForScope(scope)
serviceWorker.send('window-created', { windowId: window.id })
} catch (error) {
console.error(`Failed to start service worker for ${scope}`)
console.error(error)
}
}
})