How to check if service-worker exist in given URL?

Viewed 19912

Can I distinguish given external web sites have 'service-worker' or not?

My best guess is:

  1. retrieve all the js files from given URL
  2. search for string 'sw.js'

(i am unsure how to do this as well)

Given data would be like this:

const sitesToCheck = {
    'www.site1.com',
    'www.site2.com',
    'www.site3.com',
}
3 Answers

As suggested by Nicolas, this check can be done using headless Chrome.

Below is an example using Puppeteer:

'use strict'

const puppeteer = require('puppeteer');

(async() => {

  try {
    // Step 1: launch browser and open a new page.
    const browser = await puppeteer.launch()
    const page = await browser.newPage()

    // Step 2: Go to a URL and wait for a service worker to register.
    var url = 'https://web.dev/'
    await page.goto(url)
    const swTarget = await browser.waitForTarget(target => target.type() === 'service_worker')

    // Step 3a: If a service worker is registered, print URL of SW file to the console 
    if(swTarget) {
      console.log(swTarget._targetInfo['url'])
    }
    // Step 4: Done. Close.
    await browser.close()

  } catch (err) {
    // The process will timeout after 30s, if no service worker is registered
    console.error(err.message)
  }
})()
Related