2016-11-30 9 views
2

Я создаю приложение html/js (прогрессивное веб-приложение) с Polymer и polymer-cli и хорошо сгенерированным сервис-менеджером для кэширования и автономной работы.Уведомлять новую версию приложения с работниками службы обозревателя

Интересно, как уведомить пользователя о доступности новой версии приложения и пригласить его перезапустить браузер.

любые идеи?

Редактировать

ток в IO2016, где Эрик Bidel говорить о службы работника и уведомляет пользователя о новой версии приложения: https://youtu.be/__KvYxcIIm8?list=PLOU2XLYxmsILe6_eGvDN3GyiodoV3qNSC&t=1510

нужно проверить Google IO Web исходный код

+0

Web-приложений [пуш-уведомлений] (https://developers.google.com/ Web/основы/получение стартером/codelabs/PUSH-уведомления /). Но это неправильно использовать для уведомления пользователя о том, что приложение было обновлено. И почему вы хотите, чтобы пользователь «перезапустил браузер»? Служебный работник сделает это автоматически, когда обнаружит какие-либо изменения ... – alesc

+0

Что я вижу и понимаю, так это то, что рабочий сервис не перезапускает приложение, он просто обновляет себя и кеш при завершении загрузки кеша, вам нужно перезапустить приложение, чтобы получить новое приложение в кеше ... Я только что вспомнил разговор в 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 ... предпочтительным приложением шаблона является приложение [shop app] (https://github.com/Polymer/shop/), которое ** не включает ** проверку состояния избыточности. – alesc

+0

Я думаю, что приложение магазина не включает избыточный чек, потому что это не желание поведения. В большинстве случаев сервисный работник используется для кеширования и автономной работы: это то, что полимер-cli создает автономного и кэширующего работника. Но если вам все равно, что ваши пользователи используют последнюю версию вашего приложения, вам нужно ее обработать. Было бы плохой пользовательский опыт, если браузер перезагрузится после обновления кеша. – eskan

 Смежные вопросы

  • Нет связанных вопросов^_^