2016-09-21 16 views
0

私はサービスマンのための仲間のスクリプトを取得し、私は今試行しています。私は、サービス労働者のAPIの巨大さで、今少し圧倒さだとreg.installingredundantを返す場合の対処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); 

スクリプトはそうのように動作します状態?

これはちょっとした疑問のように思われますが、私は修行者には新しいです。

答えて

1

あなたの意図がここにあるのを理解するのはちょっと難しいので、一般的な質問にお答えします。

サービスワーカーは、インストールに失敗した場合、または新しいサービスワーカーに置き換えられた場合、冗長になります。

これが発生したときに行うことは、あなた次第です。これらの場合、あなたは何をしたいですか?

+0

どのような選択肢ですか? @ jason livesayは、console.logging以外の冗長な作業者とはあまり関係がないことを示唆しています。 – marvindanig

+1

ユーザーに通知したり、あとで更新/登録を再試行することができます。 –

関連する問題