我正在嘗試更新ServiceWorker的工作。僅針對新客戶端更新ServiceWorker
我有一個老服務員,有些窗口在它的控制下。現在有一個ServiceWorker的新版本。它得到正確安裝。但它不會爲新頁面激活。我的目標是保留舊頁面的舊頁面和每個新頁面/頁面的新頁面。
任何想法如何做到這一點?
編輯:
是我如何檢查新的服務人員未更新:
我有一個的sendMessage方法:
sendMessage(message): Promise {
const channel = new MessageChannel();
const p1 = channel.port1;
const result = new Promise(resolve => {
p1.onmessage = ({ data }) => {
resolve(data);
};
});
serviceWorker.controller.postMessage(message, [channel.port2]);
return result;
}
然後,我用它來檢查頁面開始
this.ready = this.sendMessage('version')
.then(version => {
if (version !== process.env.BUILD_NUMBER) {
console.log('$$ Version mismatch, reinstalling service worker');
throw new Error('build mismatch');
}
return serviceWorker.controller;
});
而我在ServiceWorker中回答
self.addEventListener('message', ({ data, ports }) => {
const client = ports[0];
if (data === 'version') {
client.postMessage(process.env.BUILD_NUMBER);
}
});
編輯
添加:
event.waitUntil(self.clients.claim());
幫助,但它激活ServiceWorker還爲老客戶。
感謝
*「但它不會被激活新頁面。*」:讓我們諮詢我們的水晶球,找出原因;或者換句話說:您應該爲我們提供一些具體的信息/代碼,以瞭解爲什麼您的新服務未啓用新頁面。 – trincot
我添加了有關如何檢查版本不匹配的信息。我嘗試強制更新()並重新加載頁面時,版本不匹配,但我最終在一個無限循環。 –