独立启动的渐进式 Web 应用程序无法检测站点更新

Progressive web app launched in standalone does not detect site updates

我在主屏幕上添加了一个渐进式网络应用程序。我选择了独立 运行 类型,我有一个 service-worker 运行ning 在里面。

一切正常,只有一个疑问:如果我更新我的网站(及其相关 service-worker,如果我将它直接加载到浏览器中,我可以看到更新,但如果我通过主页启动它,添加 link 我总是看到旧站点。

在独立模式下启动我的网站时是否可以请求更新?

我觉得你问的是"is there a way to dynamically update my precached assets without updating my service worker?" 是的! 我一直在努力升级这里的 JSON 缓存策略 -> https://serviceworke.rs/json-cache.html 我们很快就会发布!

经过挖掘我发现了简单的解决方案,我报告给其他人。

iOS 不支持 service-workers,所以这不是问题所在。 iOS 在缓存中保留了很多资源,所以解决方案是向各种导入添加一个参数,如下所示:

确保更新的最佳解决方案是添加 imported 的哈希值作为参数。

或者,我们可以使用时间戳来确保资源始终更新。

要附加此参数,我们可以导入这些资源,并使用 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 + '">');