问题:
当浏览器设置为“脱机工作”时,无法从 applicationCache(脱机缓存)获取备用资源。
环境细节:
- Windows 7 64 位 SP 1
- IE 10 版本。10.0.9200.16438
- 火狐版 18.0.1
- IIS 版本 7.5.7600.16385
- .manifest MIME 类型为 text/cache-manifest
清单详情:
FALLBACK:/AppCacheDemo/Home/CarNew /Sandbox/Car/AppCacheDemo
如何触发离线模式:
- IIS 已停止
- 文件菜单中的脱机工作菜单项被选中
演示应用程序详细信息:
随附的演示包含 3 页。
登录页面 (/AppCacheDemo/Home/Index),它是唯一具有清单文件属性的页面。由于具有 manifest 属性,它会自动放置在 applicationCache 中。
页面的在线版本和对应的离线版本,分别为 /AppCacheDemo/Home/CarNew、/AppCacheDemo/Home/CarNewOffline。
预期功能:
浏览器在请求 /AppCacheDemo/Home/Index 时检测到 manifest 属性的存在,并下载 manifest 中列出的所有资源。
用户单击 /AppCacheDemo/Home/Index 上存在的链接并被重定向到 /AppCacheDemo/Home/CarNew
当浏览器检测到互联网连接时,/AppCacheDemo/Home/CarNew 会提供给用户。如果未检测到 Internet 连接,则在向 /AppCacheDemo/Home/CarNew 发出请求时,会从 applicationCache 提供 /AppCacheDemo/Home/CarNewOffline。
在 Firefox 中重现的步骤(实际功能):
- 打开 FF 并清除缓存(alt + ctrl + delete)。
- 请求关于:缓存 观察磁盘/离线缓存中列出的“条目数”都列为零。
- 一个新选项卡并请求 /AppCacheDemo/Home/Index
- 单击允许按钮以允许 Firefox 存储离线数据。
- 返回 about:cache 并刷新页面。一个。磁盘缓存条目数应列为 3(可能更多,具体取决于您的环境) b。离线缓存条目数应列为 3。
- 单击磁盘缓存部分下的链接“列出缓存条目”(或在新选项卡中打开链接),并注意没有指向 /AppCacheDemo/Home/CarNew 的条目
- 返回打开 /AppCacheDemo/Home/Index 的选项卡,然后单击“让我们建立一个新的汽车链接” 您应该被重定向到 /AppCacheDemo/Home/CarNew
- 返回 about:cache?device=disk 并注意 /AppCacheDemo/Home/CarNew 存在一个新条目,它的 Fetch count 列为 1。
- 停止 IIS
- 从文件菜单中选择“脱机工作”菜单项
- 刷新当前页面(/AppCacheDemo/Home/CarNew)
- 返回 about:cache?device=disk 并注意 /AppCacheDemo/Home/CarNew 存在一个新条目,它的 Fetch count 现在列在 2 处。
根据 about:cache?device=disk for /AppCacheDemo/Home/CarNew 中列出的信息,Firefox 似乎正在向用户提供该版本的页面。我期待 /AppCacheDemo/Home/CarNewOffline 改为从 applicationCache 获得服务,因为我在清单中定义了一个后备规则,说明何时请求 /AppCacheDemo/Home/CarNew 并且不存在互联网连接,从 /AppCacheDemo/Home/CarNewOffline 提供服务applicationCache 代替。
在 Firefox 中重现的步骤(预期功能):
在执行以下步骤之前,不要忘记取消选择“脱机工作”。
- 打开 FF 并清除缓存(alt + ctrl + delete)。
- 请求关于:缓存 观察磁盘/离线缓存中列出的“条目数”都列为零。
- 一个新选项卡并请求 /AppCacheDemo/Home/Index
- 单击允许按钮以允许 Firefox 存储离线数据。
- 返回 about:cache 并刷新页面。一个。磁盘缓存条目数应列为 3(可能更多,具体取决于您的环境)。一个。离线缓存条目数应列为 3。
- 单击磁盘缓存部分下的链接“列出缓存条目”(或在新选项卡中打开链接),并注意没有指向 /AppCacheDemo/Home/CarNew 的条目
- 停止 IIS
- 从文件菜单中选择“脱机工作”菜单项
- 在地址栏中键入 /AppCacheDemo/Home/CarNew。一个。您应该被重定向到 /AppCacheDemo/Home/CarNewOffline。地址栏中的 URL 仍应为 /AppCacheDemo/Home/CarNew,但文档的内容应为 /AppCacheDemo/Home/CarNewOffline
- 在一个新选项卡中,请求 about:cache?device=disk 并注意 /AppCacheDemo/Home/CarNew 不存在任何条目。
因为 /AppCacheDemo/Home/CarNew 不存在于磁盘缓存中,FF 尊重我在清单中定义的后备规则,并改为提供 /AppCacheDemo/Home/CarNewOffline。如果我要
在 IE 中测试:
除了导航到 about:cache 之外,上面的步骤或多或少都可以遵循。不同之处在于,当 IE 设置为“离线工作”并请求 /AppCacheDemo/Home/CarNew 时,IE 会显示一个页面,并显示“无法显示此页面”消息。如果直接请求 /AppCacheDemo/Home/CarNewOffline,IE 将提供页面。由于清单中指定了回退规则,我希望 /AppCacheDemo/Home/CarNewOffline 得到服务,但事实并非如此。
在 Safari/Chrome 中测试:
Safari/Chrome 没有“脱机工作”菜单项,因此在将 navigator.onLine 报告为 false 之前需要执行一些额外的步骤。我必须从物理上拔下我的 CAT 5 电缆并断开与任何 VPN 的连接,以使浏览器处于真正断开连接的状态;但是,当 /AppCacheDemo/Home/CarNew 没有可用的互联网连接时,会遵守回退规则并提供 /AppCacheDemo/Home/CarNewOffline。
AppCacheDemo 项目(配置为使用 IIS 的 Microsoft MVC 4 Web 应用程序):