私はサービスマンのための仲間のスクリプトを取得し、私は今試行しています。私は、サービス労働者のAPIの巨大さで、今少し圧倒さだとreg.installing
はredundant
を返す場合の対処one'dかを把握することができないようServiceWorkerの重複した状態はどうすればよいですか?
((n, d) => {
if (!(n.serviceWorker && (typeof Cache !== 'undefined' && Cache.prototype.addAll))) return;
n.serviceWorker.register('/serviceworker.js', { scope: './book/' })
.then(function(reg) {
if (!n.serviceWorker.controller) return;
reg.onupdatefound =() => {
let installingWorker = reg.installing;
installingWorker.onstatechange =() => {
switch (installingWorker.state) {
case 'installed':
if (navigator.serviceWorker.controller) {
updateReady(reg.waiting);
} else {
// This is the initial serviceworker…
console.log('May be skipwaiting here?');
}
break;
case 'waiting':
updateReady(reg.waiting);
break;
case 'redundant':
// Something went wrong?
console.log('[Companion] new SW could not install…')
break;
}
};
};
}).catch((err) => {
//console.log('[Companion] Something went wrong…', err);
});
function updateReady(worker) {
d.getElementById('swNotifier').classList.remove('hidden');
λ('refreshServiceWorkerButton').on('click', function(event) {
event.preventDefault();
worker.postMessage({ 'refreshServiceWorker': true });
});
λ('cancelRefresh').on('click', function(event) {
event.preventDefault();
d.getElementById('swNotifier').classList.add('hidden');
});
}
function λ(selector) {
let self = {};
self.selector = selector;
self.element = d.getElementById(self.selector);
self.on = function(type, callback) {
self.element['on' + type] = callback;
};
return self;
}
let refreshing;
n.serviceWorker.addEventListener('controllerchange', function() {
if (refreshing) return;
window.location.reload();
refreshing = true;
});
})(navigator, document);
:
スクリプトはそうのように動作します状態?
これはちょっとした疑問のように思われますが、私は修行者には新しいです。
どのような選択肢ですか? @ jason livesayは、console.logging以外の冗長な作業者とはあまり関係がないことを示唆しています。 – marvindanig
ユーザーに通知したり、あとで更新/登録を再試行することができます。 –