这与尚未回答的SO问题基本相同:Offline Web App not caching on Firefox but ok on Chrome
我遇到了同样的问题,我会提供更多信息,因为它可能会帮助某人试图找出试图实现缓存清单的神秘奥秘和陷阱。
问题:点击页面重新加载/刷新,页面应该从脱机缓存重新加载,但事实并非如此。
在Chrome 23中工作正常:当我断开网络连接并刷新页面时,它会正常加载并且控制台会显示Application Cache NoUpdate事件。
然而,Firefox 15.0.1向我展示了我的404页面。
故障排除(Firefox):转到Firebug并单击DOM,然后单击applicationCache。状态显示0,表示未缓存(页面尚未脱机存储)。
故障排除(Firefox):转到Firefox选项 - >高级并查看脱机Web内容和用户数据。它显示我的域使用1.4MB数据供离线使用。 (这是检查您的页面是否已被缓存的好地方。)
故障排除(Firefox):打开一个新选项卡,然后转到about:cache。在这里,您应该看到脱机缓存设备的标题。在这里,您可以看到缓存目录,它是保存脱机缓存文件的位置。如果单击列表缓存条目,您将在脱机缓存清单中看到这些文件。
有两件事我觉得很奇怪:1)当我点击列表中的任何文件时,它会转到一个空白页面,上面写着“缓存条目信息您选择的缓存条目不可用”。但是,文件确实存在并且在缓存目录中不是空白2)尽管列出了缓存清单中的所有文件,但我在此处未列出我正在呼叫的页面(在Chrome DevTools中,它在清单中显示为Master:即使它未在缓存清单文件中明确列出,它也会自动缓存。)
以下是我在线时看到的内容:使用冷(空)缓存,当我加载页面时,控制台会显示检查,下载,进度和缓存事件,但缓存状态未缓存。基本上,下载缓存文件,但无法访问它们。 Firebug DOM applicationCache说:离线缓存中的0项(这与about:cache和Options - > Advanced中显示的内容相矛盾)。状态为1,表示空闲。当我在线查看Firebug中的Net选项卡时,它会显示对200 OK响应的页面的GET请求。 Expires设置显示1969年12月31日星期三,我认为这意味着将始终提取页面。其他文件显示304 Not Modified响应,这意味着它们是从浏览器缓存加载的,而不是脱机缓存(Chrome对这些文件的类似响应是200 OK(来自缓存),这意味着它们是从离线加载的缓存,而不是浏览器缓存。)
当我离线时:使用“未缓存”缓存,GET请求失败,并加载带有200 OK(BFCache)响应的脱机回退404页面。
似乎已下载脱机缓存,因为它实际存在于磁盘上,并且控制台中显示了进度事件,但Firefox从未触发缓存事件,因此某些资源未成功下载。这些文件都是png,js或php格式,所以没有疯狂的文件格式。 Chrome会将完全相同的文件下载到缓存中而不会出现问题。我也尝试过移动版Safari,它成功地从离线缓存重新加载页面。
Firefox是否有任何已知问题没有缓存某些文件类型?我在我的一些文件上使用.html.php扩展名。我还使用php文件动态生成清单,因此它只获取存在的文件,并将它们哈希以检测更改并更新清单。
后续步骤:我将尝试使用一个简单的清单来查看是否可以使其工作,然后逐个添加文件以查看哪个文件触发了错误。也许Firefox不喜欢我动态生成缓存清单而不是手动更新静态文件的事实?
我已经了解了很多关于缓存清单的神秘复杂性,但我更多的是黑客而不是计算机专家。有没有其他人在Firefox上遇到这种怪癖?
页面的开头:
<!DOCTYPE html>
<html manifest="/directory/manifest.php">
然后manifest.php只是
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";
等。它使用RecursiveDirectoryIterator来获取目录中的所有文件(默认情况下包含的缓存本身除外)。