我正在开发的一个web应用程序有问题,我在这里发布了一个问题,这个问题有点模糊,可能没有太大帮助。我决定创建一个非常基本的网站,并将其构建为像主应用程序一样,看看它在哪里崩溃。我已经做到了这一点,并且被离线缓存直接卡住了。
这是一个基本的3页静态网站,在IIS 7.5中本地托管。我创建了文件夹c:\inetpub\wwwroot\ManifestTesting,将其作为web应用程序添加到IIS,并为.appcache扩展添加了一个新的MIME类型的文本/缓存清单。我也在使用FireFox 9.0进行测试,因为它具有离线模式功能。
我创建了3个html页面,并将它们添加到ManifestTesting文件夹中:
- index.htm-此页包含两个指向page1.htm和page2.htm的链接
- page1.htm-只包含一个标题,上面写着第1页
- page2.htm-只包含一个标题,上面写着第2页
所以现在如果我浏览到http://localhost/manifesttesting如果获取索引页面,则可以导航到这两个页面。
然后我创建了一个名为manifest.appcache的文件,并将其添加到ManifestTesting文件夹中:
CACHE MANIFEST
CACHE:
index.htm
page1.htm
page2.htm
并在index.htm:中添加了对清单文件的引用
<html manifest="manifest.appcache">
因此,如果我清除所有历史记录并浏览到index.htm,FireFox会询问我是否希望允许网站存储数据以供离线使用。我单击"允许",将浏览器切换到脱机模式,然后尝试导航到page1.htm,这很好!到目前为止一切都很好。
现在我有一点不明白。然后,我在ManifestTesting文件夹中创建了一个名为"pages"的新文件夹,并将page1和page2移动到其中。我更新了索引中的链接以引用新位置,如果我在没有清单引用的情况下浏览网站,一切都会像以前一样正常。然后,我在索引中重新引用清单文件,并将清单更新为:
CACHE MANIFEST
CACHE:
index.htm
pages/page1.htm
pages/page2.htm
然后我清除历史记录,刷新,firefox要求允许网站存储离线数据,启用离线模式,然后尝试导航到page1——这不起作用!FireFox告诉我它处于离线模式,无法浏览网页!
我做错了什么?
这里可能有几种可能性:
1) 你能试着输入"/pages/page1.htm"而不是"pages/page1.htm"吗
2) 还要确保所有链接和您在浏览器上键入的内容都是区分大小写的。("pages/page1.htm"与"pages/page1.htm"不同)
3) 你提到你澄清了历史。。。如果您以这种方式进行测试,那么还需要清除物理文件缓存,而不仅仅是历史记录。
4) 这可能是最有可能的原因:当您对清单文件进行更改并刷新浏览器时,就会发生这种情况(假设您在线)
- 浏览器首先加载回缓存中的所有文件
- 然后浏览器在线检查您的清单文件
- 它检测到清单文件已更改,然后将继续下载新文件
- 但是,此时,您仍将查看"旧文件",因为浏览器在联机下载"新文件"之前已经加载了旧文件
- 如果此时,如果您点击刷新再次(第二次),你应该得到"新文件"(并且你可以在脱机后转到第1页和第2页
这是目前的标准行为。有些人放置了一些事件处理程序来提示用户进行另一次刷新(在第一次刷新之后)