對於您所描述的第一次訪問,註冊尚未active
當該承諾解決但它是「正在安裝」,因此註冊的installing
屬性將返回一個服務工作者。
由於沒有服務人員處於waiting
狀態,因此它將轉換爲activating
,然後轉換爲active
。所以你是對的,註冊財產最初不是active
但刷新,它會。
將下面的代碼說明:
navigator.serviceWorker.register('/serviceworker.js').then(onRegistration);
function onRegistration(registration) {
if (registration.waiting) {
console.log('waiting', registration.waiting);
registration.waiting.addEventListener('statechange', onStateChange('waiting'));
}
if (registration.installing) {
console.log('installing', registration.installing);
registration.installing.addEventListener('statechange', onStateChange('installing'));
}
if (registration.active) {
console.log('active', registration.active);
registration.active.addEventListener('statechange', onStateChange('active'));
}
}
function onStateChange(from) {
return function(e) {
console.log('statechange', from, 'to', e.target.state);
}
}
在第一次訪問時,console.log
輸出將是:
installing ServiceWorker {scriptURL: "http://...", state: "installing", onstatechange: null, onerror: null}
statechange initial state installing changed to installed
statechange initial state installing changed to activating
statechange initial state installing changed to activated
,你觀察到的狀態的變化同步發生。