2016-11-30 34 views
2

Polymerとpolymer-cliを使用してhtml/jsアプリケーション(プログレッシブWebアプリケーション)を構築し、キャッシングとオフラインのサービスワーカーを生成します。ブラウザのサービスワーカーに新しいアプリケーションバージョンを通知します

新しいバージョンのアプリケーションが利用可能になったときにユーザーに通知し、ブラウザを再起動するようにユーザーに通知する方法を知りました。

編集

エリックBidelは、サービス労働者について話すと、アプリケーションの新しいバージョンをユーザーに通知しIO2016の話: https://youtu.be/__KvYxcIIm8?list=PLOU2XLYxmsILe6_eGvDN3GyiodoV3qNSC&t=1510

グーグルIOのWebソースコード

+0

のWebアプリケーションのサポート[プッシュ通知](https://developers.google.com/あなたの質問に答えるだろうと考えているものですweb/fundamentals/getting-started/codelabs /プッシュ通知/)しかし、これは、アプリケーションが更新されたことをユーザーに通知するために使用するのは間違っているようです。そして、なぜあなたは "ブラウザを再起動"したいですか?サービスワーカーは変更を検出すると自動的にこれを行います... – alesc

+0

サービスワーカーがアプリケーションを再起動しないということは、キャッシュのダウンロードが完了したら再起動する必要があるということですキャッシュの新しいアプリケーションを取得するアプリ...私はちょうどEric Bidelがこれについて話しているIOでの話を思い出しました、私はこの話を見つけることを試みます。 – eskan

答えて

4

参照です: https://developers.google.com/web/fundamentals/instant-and-offline/service-worker/lifecycle

そして、ここでは、私が

document.addEventListener('DOMContentLoaded', function(){ 
    if ('serviceWorker' in navigator) { 
     registerServiceWorker(); 
    } 

    function registerServiceWorker() { 
     navigator.serviceWorker.register('/service-worker.js').then(function(registration) { 
      checkForServiceWorkerUpdate(registration); 

      window.SWRegistrationObj = registration; 
      console.info('ServiceWorker registration successful with scope: ', registration.scope); 
     }, function(err) { 
      console.info('ServiceWorker registration failed: ', err); 
     }); 
    } 

    function checkForServiceWorkerUpdate(registration) { 
     registration.addEventListener('updatefound',() => { 
      console.log('show a toast'); 
      document.querySelector('#update-sw').addEventListener('click',() => { 
       window.location.reload(true); 
      }); 
     }); 
    } 
}); 
0
をチェックする必要があります

IOチームのおかげで、現在のサービスワーカーが冗長化されているかどうかを確認する必要があります。

// Check to see if the service worker controlling the page at initial load 
// has become redundant, since this implies there's a new service worker with fresh content. 
if (navigator.serviceWorker && navigator.serviceWorker.controller) { 
    navigator.serviceWorker.controller.onstatechange = function(event) { 
    if (event.target.state === 'redundant') { 
     // Define a handler that will be used for the next io-toast tap, at which point it 
     // be automatically removed. 
     const tapHandler = function() { 
     window.location.reload(); 
     }; 

     if (IOWA.Elements && IOWA.Elements.Toast && 
      IOWA.Elements.Toast.showMessage) { 
      IOWA.Elements.Toast.showMessage(
      'A new version of this app is available.', tapHandler, 'Refresh', 
      null, 0); // duration 0 indications shows the toast indefinitely. 
     } else { 
     tapHandler(); // Force reload if user never was shown the toast. 
     } 
    } 
    }; 
} 
ここ
+0

'polymer-cli'はビルド時にサービスワーカーを生成するので、これはもう必要ないと思います。この種のコードが含まれていることは間違いありません。 IOWAアプリを参照する場合、優先するテンプレートアプリは[店舗アプリ](https://github.com/Polymer/shop/)です。**には**冗長状態チェックが含まれていません**。 – alesc

+0

私は店のアプリが冗長チェックを含んでいないと思う。ほとんどの時間サービスワーカーは、キャッシュとオフラインに使用されます。これは、ポリマークリティがオフラインのキャッシングワーカーを構築するものです。しかし、あなたのユーザーがあなたのアプリの最新バージョンを使用しているのであれば、それを処理する必要があります。キャッシュの更新後にブラウザがリロードすると、ユーザーエクスペリエンスが低下します。 – eskan

関連する問題