SPA Angular index.html没有更新缓存(我使用缓存半身像)

时间:2018-05-19 13:47:43

标签: angular caching grails single-page-application browser-cache

我使用一个简单的结构,在我的应用程序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,主动破坏缓存。

1 个答案:

答案 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();
    }