我使用一个简单的结构,在我的应用程序SPA中类似于此: http://mcalthrop.github.io/angular-spa-demo/#/resources(tks示例mcalthrop)
在index.html(标题)中有一个初始加载的资产(js,css)和缓存区域(哈希),之后只加载模板和json(正文)AngularJS。
问题在于,只有当用户使用Ctrl + R(硬重新加载)或注销时,才会加载使用安装更新的功能。我们的客户可以花几天时间打开页面。
报告的类似问题: Refreshing a cached Angular SPA
我使用grails,angular 1.6,主动破坏缓存。
答案 0 :(得分:0)
“广告素材”替代方案:
说明::在SPA资产文件上加载唯一的生命周期应用程序。但是,就我而言,用户登录了很长时间才想要新版本的资产,而没有新的登录名。因此,当出现新的js / css缓存失效时,我该怎么做,我刷新了页面。如果没有,请继续。
function urlAssetOk(url) {
var http = new XMLHttpRequest();
var urlWithoutCache = url + "?t=" + (new Date()).getTime();
http.open('HEAD', urlWithoutCache, false);
http.send();
return http.status == 200;
}
function updatedCache() {
var jsApplicationAsset = document.querySelectorAll('[class="application-asset"][src*=application-]')[0];
var cssApplicationAsset = document.querySelectorAll('[class="application-asset"][href*=application-]')[0];
var jsObsolete = jsApplicationAsset && !urlAssetOk(jsApplicationAsset.src) ? true : false;
var cssObsolete = cssApplicationAsset && !urlAssetOk(jsApplicationAsset.src) ? true : false;
if (jsObsolete || cssObsolete) {
window.location.reload(true);
}
}
window.onhashchange = function() {
updatedCache();
}