RNA*_*RNA 5 javascript node.js meteor service-worker
我可以区分给定的外部网站是否有"服务工作者"?
我最好的猜测是:
(我不确定如何做到这一点)
鉴于数据将是这样的:
const sitesToCheck = {
'www.site1.com',
'www.site2.com',
'www.site3.com',
}
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 16
如果要在代码中执行此操作,则只能在与要检查的工作程序相同的原点内执行此操作.在同一个源中,您可以使用getRegistration(url)(它为您提供将解析为URL undefined的ServiceWorkerRegistration对象或URL 的对象),或getRegistrations()(它为您提供ServiceWorkerRegistration对象数组的承诺).例如:
navigator.serviceWorker.getRegistrations().then(registrations => {
console.log(registrations);
});
Run Code Online (Sandbox Code Playgroud)
正如Nicolas所建议的,这项检查可以使用无头 Chrome 来完成。
下面是一个使用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)
}
})()
Run Code Online (Sandbox Code Playgroud)