Прогрессивное веб-приложение, запущенное в автономном режиме, не обнаруживает обновления сайта

У меня есть прогрессивное веб-приложение, которое добавлено на главный экран. Я выбрал автономный тип запуска, у меня в нем работает service-worker.

Все работает отлично, только одно сомнение: если я обновляю свой сайт (с его родственником service-worker, я могу видеть обновления, если я загружаю его прямо в браузер, но если я запускаю его по домашней добавленной ссылке, я вижу всегда старый сайт.

Есть ли способ запрашивать обновления при запуске моего сайта в автономном режиме?


person firegloves    schedule 29.05.2017    source источник
comment
Какой start_url вы используете в своем манифесте веб-приложения? Если вы перейдете к одному и тому же start_url в Chrome на своем устройстве, увидите ли вы контент, отличный от того, что вы видите в ссылке добавления на главный экран?   -  person Jeff Posnick    schedule 09.06.2017


Ответы (2)


Я думаю, вы спрашиваете: «Есть ли способ динамически обновлять мои предварительно кэшированные активы без обновления моего сервисного работника?» Да! Я работаю над обновлением стратегии кэширования JSON здесь -> https://serviceworke.rs/json-cache.html Мы опубликуем это в ближайшее время!

person Chris Love    schedule 15.06.2017
comment
звучит интересно...попробую и посоветую,заранее спасибо - person firegloves; 19.06.2017
comment
Крис Ют Стратегия кэширования json поддерживается ios safari? - person firegloves; 03.07.2017
comment
Да, это будет. Этим механизмом я занимаюсь уже лет 6-7. С сервисными работниками я обновлял его и переходил с localStorage на indexeddb. Это презентация, которую я сделал @ Velocity несколько лет назад по общим концепциям -› youtu.be/GKxkzu0pHUc? list=PLqf5nhDkyqZHR6fQxCYoqPIJwiRdoMXMf Это статья об использовании localStorage для кэширования, которую я написал давным-давно -› love2dev.com/blog/ Я надеюсь, что на этой неделе будет завершен новый код для сервисного работника с запасным вариантом устаревшего браузера (iOS). - person Chris Love; 04.07.2017

После копания я обнаружил простое решение, я сообщаю об этом другим.

iOS не поддерживает service-workers, так что проблема не в этом. iOS хранит в кеше много ресурсов, поэтому решение состоит в том, чтобы добавить параметр к различным импортам следующим образом:

Лучшим решением для обеспечения обновлений является добавление хэша import в качестве параметра.

В качестве альтернативы мы можем использовать метку времени, чтобы гарантировать, что ресурсы ВСЕГДА обновляются.

Чтобы прикрепить этот параметр, мы можем импортировать эти ресурсы, вводя их с помощью javascript, например так

/**
 * inietta uno script nella pagina
 */
function appendScript(url) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    script.async = false;   // async false to wait for previous file loading
    head.appendChild(script);
}

// create parameter with date
var currVersion = '?v=' + new Date().getTime();

// get head html element
var head = document.getElementsByTagName("head")[0];

// append script
appendScript('app.js' + currVersion);

// append css
head.insertAdjacentHTML('beforeend', '<link rel="stylesheet" type="text/css" href="style.css' + currVersion + '">');
person firegloves    schedule 03.07.2017