Преобразованный веб-сайт в прогрессивное веб-приложение (PWA), не работающее в Edge

«Превратите свой веб-сайт в прогрессивное веб-приложение», — говорили они.

«Это будет легко», — сказали они.

Так я и сделал.

Мой сайт (www.romanorum.com.au) представляет собой довольно традиционные HTML-формы, динамические веб-страницы и т. д., использующие бритву. Я следовал за прыгающим мячом, сделал свой сайт HTTPS, загрузил сценарии сервис-воркеров, запустил Lighthouse и т. д. Конечно, мои динамические веб-страницы постоянно выдавали ошибки, используя Cache First. Я изменил его на Server First, и все выглядело нормально ... но теперь я замечаю, что любая страница, которая публикует html-форму (например, мой экран поиска или страница проверки), получает ошибку «Не удается найти вашу страницу» в Edge. Эти страницы по-прежнему отлично работают в Chrome и даже в Internet Explorer, но Edge никогда не передавал данные форм с тех пор, как я преобразовал их в PWA, и вместо этого выдавал ошибки.

Формы отправляются с использованием собственного HTML5, я использую как минимум javascript на сайте. Что я мог сделать не так?

РЕДАКТИРОВАТЬ: Вот сценарий сервисного работника, который я добавил из PWABuilder, файлы cshtml для публикации не были изменены, поскольку раньше они прекрасно работали в Chrome/IE и Edge. Я думаю, что мой сайт на самом деле не PWA ...

var CACHE = 'pwabuilder-precache';
var precacheFiles = [
      /* Add an array of files to precache for your app */
    ];

//Install stage sets up the cache-array to configure pre-cache content
self.addEventListener('install', function(evt) {
  console.log('[PWA Builder] The service worker is being installed.');
  evt.waitUntil(precache().then(function() {
    console.log('[PWA Builder] Skip waiting on install');
    return self.skipWaiting();
  }));
});


//allow sw to control of current page
self.addEventListener('activate', function(event) {
  console.log('[PWA Builder] Claiming clients for current page');
  return self.clients.claim();
});

self.addEventListener('fetch', function(evt) {
  console.log('[PWA Builder] The service worker is serving the asset.'+ evt.request.url);
  evt.respondWith(fromServer(evt.request).catch(fromCache(evt.request)));
  evt.waitUntil(update(evt.request));
});


function precache() {
  return caches.open(CACHE).then(function (cache) {
    return cache.addAll(precacheFiles);
  });
}

function fromCache(request) {
  //we pull files from the cache first thing so we can show them fast
  return caches.open(CACHE).then(function (cache) {
    return cache.match(request).then(function (matching) {
      return matching || Promise.reject('no-match');
    });
  });
}

function update(request) {
  //this is where we call the server to get the newest version of the 
  //file to use the next time we show view
  return caches.open(CACHE).then(function (cache) {
    return fetch(request).then(function (response) {
      return cache.put(request, response);
    });
  });
}

function fromServer(request){
  //this is the fallback if it is not in the cache to go to the server and get it
  return fetch(request).then(function(response){ return response});
}


person Phraates    schedule 30.01.2019    source источник
comment
Пожалуйста, прочитайте Что-то на моем веб-сайте не работает. Можно просто вставить ссылку на него?. Вопросы, которые зависят от внешних ресурсов, становятся бесполезными, когда внешний ресурс исчезает или закрепляется. Создайте минимальный воспроизводимый пример и вместо этого поместите его в сам вопрос.   -  person Quentin    schedule 31.01.2019
comment
Я предоставил URL-адрес (не как ссылку, которую вы заметите) только для фона, и я не могу понять, какой код публиковать. Поскольку проблема появляется только в Edge и только после того, как я ее отредактировал с помощью PWA, код страницы не изменился. Я также должен упомянуть, что формы отлично публикуются в Edge, если используется просмотр InPrivate. Я добавлю код сценария PWA к моему вопросу, так как это единственный код, который был добавлен, но он был автоматически сгенерирован сайтом компоновщика PWA.   -  person Phraates    schedule 31.01.2019
comment
Кажется, у меня нормально работает на Android Edge. Я добрался до экрана Checkout без проблем. Вы тестировали в том же браузере, что и разработка? Если это так, возможно, 1) убедитесь, что вы полностью очистили кеш от всего 2) попросите кого-нибудь еще попробовать в Edge, который еще не был там.   -  person Mathias    schedule 31.01.2019
comment
Интересный. Да, я изначально тестировал на своей машине для разработки, и я тоже автоматически предположил, что это кеш. Очистил все кэши и попробовал еще раз. Не повезло. Так же протестировано на 2-х других машинах, которые еще не были на сайте. Во всех случаях Chrome работал нормально, а Edge — нет (если только это не был InPrivate).   -  person Phraates    schedule 01.02.2019


Ответы (2)


Вы реализовали все необходимые вещи:

  • Веб-манифест с правильными заполненными полями
  • Веб-сайт, который будет обслуживаться с безопасного (HTTPS) домена
  • Значок, представляющий приложение на устройстве.
  • Зарегистрированный сервисный работник, чтобы приложение работало в автономном режиме (в настоящее время это требуется только для Chrome для Android)

С этого сайта: https://developer.mozilla.org/en-US/docs/Web/Apps/Progressive/Installable_PWAs

person Gizzmo    schedule 31.01.2019

Есть некоторые проблемы, с которыми я столкнулся с Edge. Затем я узнал, что существует зависимость от версии сборки Windows, сервисный работник и PWA будут работать без проблем в Windows 10 RS4, все функции будут доступны в RS5, только такие функции, как < strong>Quota API и т. д.

person Aji    schedule 31.01.2019