您需要在 'activate' 事件(缓存完成后发生)上将 client.postMessage() 添加到服务工作者,并将 navigator.serviceWorker.addEventListener('message') Fn 添加到内容页面 index.html 或其他.
这是我使用的代码:
// activate with notification TO DOM (!)
global.addEventListener('activate', event => {
event.waitUntil(async function() {
await global.clients.claim();
delay(5000).then(() => {
data = 'activated';
console.log('activate msg => dom: ' + data);
global.clients.matchAll().then(all => all.map(client => client.postMessage(data)));
});
}());
});
在内容页面脚本上:
navigator.serviceWorker.addEventListener('message', function(event) {
console.log('sw message: ' + event.data);
if ( event.data === 'activated' ) {
somefunctions();
}
});
请注意 global.clients.matchAll() 将消息广播到服务工作者控制下的所有内容,这可能是您不想要的。