4

我正在使用 angularjs 路由:

angular.module('questionModule', []).
  config(['$routeProvider', function ($routeProvider) {
      $routeProvider.
      when('/questions', { templateUrl: 'partials/questions.htm', controller: QuestionsController }).
      when('/questions/:Id', { templateUrl: 'partials/questionDetail.htm', controller: QuestionDetailCtrl }).
      otherwise({ redirectTo: '/questions' });
  } ]);

在本页面:

<html ng-app="questionModule" manifest="AngularManifest.appcache" >
<head>
    <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
    <script src="question.js" type="text/javascript"></script>
    <script src="app.js" type="text/javascript"></script>
    <script src="appCacheBootstrap.js" type="text/javascript"></script>
</head>
<body>
    <h2>This example uses angular js routing to display partial views</h2>
    <div ng-view></div>
</body>

然而,当我对部分视图文件之一进行更改并更新清单文件以强制刷新应用程序缓存时,更改不会出现。我必须访问 chrome://appcache-internals/ 并删除应用程序缓存才能查看更新。我如何使这个自动化?当我在不使用路由的页面上时,应用程序缓存似乎可以正确刷新。

这是我处理清单文件更改的方式:

$(function () {
    if (window.applicationCache) {
        applicationCache.addEventListener('updateready', function () {
            console.log("appcache status: " + window.applicationCache.status);
            if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
                window.applicationCache.swapCache();
                if (confirm('A new version of this site is available. Load it?')) {
                    window.applicationCache.update();
                    window.location.reload();
                }
            }
        });
    }
    {
        console.log("null window.applicationCache");
    }
});

当我在 augularjs 路由页面上时,window.applicationCache 为空。

4

2 回答 2

2

在包含“null window.applicationCache”消息的卷曲之前是否缺少“else”?

如果是这样,正确的片段应该是:

$(function () {
    if (window.applicationCache) {
        applicationCache.addEventListener('updateready', function () {
            console.log("appcache status: " + window.applicationCache.status);
            if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
                window.applicationCache.swapCache();
                if (confirm('A new version of this site is available. Load it?')) {
                    window.applicationCache.update();
                    window.location.reload();
                }
            }
        });
    }
    else{
        console.log("null window.applicationCache");
    }
});

否则,无论缓存是否处于活动状态,您每次都会打印空 applicationCache 消息。不要相信您在控制台中阅读的所有内容:)。

于 2013-10-30T22:54:24.010 回答
0

事实证明,因为我是通过 asp.net 开发服务器而不是 IIS 运行该站点,所以它不起作用。我怀疑开发服务器添加了标题以阻止它工作。

于 2013-08-30T14:53:18.083 回答