独立启动的渐进式 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 + '">');
我在主屏幕上添加了一个渐进式网络应用程序。我选择了独立 运行 类型,我有一个 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 + '">');