Service Worker не работает в автономном режиме на IOS 12 - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь заставить PWA работать в обоих режимах онлайн / офлайн на обеих ОС iOS / Android, пока я уже подготовил своего сервисного работника и работаю на Android, правильно ли работает автономная страница сервиса, но на IOS этовообще не работает, я могу добавить свой PWA на домашний экран, и он работает всеми методами IndexedDB, но когда я перехожу в автономный режим, он говорит мне, что у Safari нет подключения к Интернету, я думаю, что может быть проблема с методом установкимой сервисный работник, но я понятия не имею, как проверить это на iphone, так как я занимаюсь разработкой для Linux, вот мой код сервисного работника, который работает нормально на Android, но не на IOS.

(function() {
'use strict';
  var filesToCache = [
    '/app/inicio',
    '/app/mapa',
    '/app/visita',
    '/app/sincronizacion',
    '/static/base/bs4/js/jquery-3.1.1.min.js',
    '/static/base/bs4/css/heineken-bs.min.css',
    '/static/base/bs4/js/bootstrap.min.js',
    '/static/base/bs/js/bootstrap-switch.min.js',
    '/static/base/fontawesome-5.3.1/js/all.min.js', 
    '/static/base/js/chainedfk.js',
    '/static/base/multiselect/js/jquery.multi-select.js',
    '/static/base/js/common.js',
    '/static/base/js/jquery.numeric.min.js',
    '/static/base/bs4/js/popper.min.js',
    '/static/base/bs/css/bootstrap-switch.min.css',
    '/static/base/imgs/favicon/favicon.ico',
    '/static/base/imgs/favicon/ms-icon-144x144.png',
    '/static/base/leaflet-1.3.4/leaflet.css',
    '/static/base/leaflet-1.3.4/leaflet.js',
    '/static/base/bs4/css/map-styles.css',
    '/static/base/leaflet-usermarker-master/src/leaflet.usermarker.js',
    '/static/base/leaflet-usermarker-master/src/leaflet.usermarker.css',
    '/static/base/Leaflet.markercluster-master/dist/leaflet.markercluster-src.js',
    '/static/base/Leaflet.markercluster-master/dist/MarkerCluster.css',
    '/static/base/leaflet-draw/src/leaflet.draw.css',
    '/static/base/leaflet-draw/src/Leaflet.draw.js',
    '/static/base/drag/jquery.sortable.min.js',
    '/static/base/date-time/js/moment-locale.min.js',
    '/static/base/date-time/js/bootstrap-datetimepicker.min.js',
    '/static/base/date-time/css/bootstrap-datetimepicker.min.css',
    '/static/base/select-picker/css/select-picker.css',
    '/static/base/select-picker/js/select-picker.min.js',
    '/static/base/js/turf.min.js',
    '/static/base/js/util_v1.js',
    '/static/base/js/util_db_v1.js',
    '/static/base/localForage/localforage.min.js',
    '/static/base/localForage/localforage-getitems.js',
    '/static/base/localForage/localforage-setitems.js',
    '/static/base/localForage/localforage-startswith.js',
    '/static/base/js/progressbar.js',
    '/static/base/js/util_db_v1.js',
    '/static/base/js/moment.min.js',
    '/static/base/imgs/puntos/rojo.png',
    '/static/base/imgs/puntos/verde.png',
    '/static/base/imgs/puntos/amarillo.png',
    '/static/base/imgs/puntos/azul.png',
    '/static/base/leaflet.offline/dist/bundle.js',
    '/static/base/imgs/favicon/favicon-16x16.png',
    '/static/base/imgs/favicon/favicon-32x32.png',
    '/static/base/imgs/favicon/favicon-96x96.png',
    '/static/base/imgs/favicon/apple-icon-57x57.png',
    '/static/base/imgs/favicon/apple-icon-60x60.png',
    '/static/base/imgs/favicon/apple-icon-72x72.png',
    '/static/base/imgs/favicon/apple-icon-76x76.png',
    '/static/base/imgs/favicon/apple-icon-114x114.png',
    '/static/base/imgs/favicon/apple-icon-120x120.png',
    '/static/base/imgs/favicon/apple-icon-144x144.png',
    '/static/base/imgs/favicon/apple-icon-152x152.png',
    '/static/base/imgs/favicon/apple-icon-180x180.png',
    '/static/base/imgs/favicon/android-icon-192x192.png',
  ];
  var staticCacheName = 'pages-cache-v5';
  self.addEventListener('install', function(event) {
    event.waitUntil(
      caches.open(staticCacheName)
      .then(function(cache) {
        return cache.addAll(filesToCache);
      })
    );
  });
  self.addEventListener('fetch', function(event) {
    if (event.request.url.match( '^.*(\/app\/).*$' ) || event.request.url.match( '^.*(\/app/inicio\/).*$' ) || event.request.url.match( '^.*(\/app/sincronizacion\/).*$' ) || event.request.url.match( '^.*(\/app/mapa\/).*$' ) || event.request.url.match( '^.*(\/app/visita\/).*$' ) || event.request.url.match( '^.*(\/static\/).*$' )){
        event.respondWith(
        caches.match(event.request).then(function(response) {
          if (response) {
            return response;
          }
          return fetch(event.request).then(function(response) {
            if (response.status === 404) {
              return caches.match('internet-error.html');
            }
            return caches.open(staticCacheName).then(function(cache) {
              if (event.request.url.indexOf('test') < 0) {
                cache.put(event.request.url, response.clone());
              }
              return response;
            });
          });
        }).catch(function(error) {
          //console.log('Error, ', error);
          return caches.match('internet-error.html');
        })
      );
    }else{
      false
    }
  });
  self.addEventListener('activate', function(event) {
    console.log('Activando service worker...');
    var cacheWhitelist = [staticCacheName];
    event.waitUntil(
      caches.keys().then(function(cacheNames) {
        return Promise.all(
          cacheNames.map(function(cacheName) {
            if (cacheWhitelist.indexOf(cacheName) === -1) {
              console.log("Eliminando"+cacheName);
              return caches.delete(cacheName);
            }
          })
        );
      })
    );
  });
})();

, и этоскрипт, который активирует такого сервисного работника на index.html

{% if browser_mobile %}
  if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
      navigator.serviceWorker.register("{% url 'sw.js' %}")
      .then(function(registration){
        console.log('Registré el Service Worker: Paso a redirección',registration.scope);
        if (window.matchMedia('(display-mode: standalone)').matches) {
          var url = "{% url 'autentificacion:inicio' %}";
          window.location = url
        }else{
          console.log("This is NOT! running as standalone.");
        }
      })
      .catch(function(err){
        console.log('Falló la instalación del Service Worker: ', err);
      });
    });
  }
{% else %}

Что-то не так с этим сервисным работником?Есть ли способ отладки установки службы IOS?похож на инструменты chrome-dev?

...