确定一个页面在github页面上已经过时了

Github页面在所有提供的内容上设置了非常积极的caching标题( Cache-Control: max-age=86400 1天,提前1个月Expires )。

如果你更新你的页面并推送到github,那么重新访问已经获得caching副本的页面的人不会在没有实际清理浏览器caching的情况下获得新的页面。

如何在页面中运行的脚本确定它是陈旧的,并强制更新?

步骤可能是:

  1. 确定你在github页面上运行: easy ,parse window.location for github.com/
  2. 确定当前版本的页面: hard ,git不会让你将sha1embedded到提交的页面中; 没有RCS $id$ 。 那么你怎么知道你是什么版本?
  3. 在github中获取当前版本; ,github摆脱了未经authentication的v2 API。 推动github和github开始发布也有一段时间的断开。 那么你怎么知道你可以得到什么版本?
  4. 确定你是陈旧的,如何使页面失效并强制重新加载? hardwindow.location.reload(true)在Safari / Chrome中不起作用,例如…

所以它解决这些步骤 当然可能有另一种方式?

要更好地控制网站的caching,您可以使用HTML5caching清单。 看到:

  • 在HTML5岩石上使用应用程序caching的初学者指南
  • 在Mozilla开发者networking上使用应用程序caching
  • 在维基百科上的HTML5caching清单
  • 离线Web应用程序 W3C工作组注释
  • 在WHATWG 离线Web应用程序

您可以使用window.applicationCache.swapCache()更新网站的caching版本,而无需手动重新加载页面。

这是HTML5 Rocks的一个代码示例,解释如何将用户更新到您网站的最新版本:

 // Check if a new cache is available on page load. window.addEventListener('load', function(e) { window.applicationCache.addEventListener('updateready', function(e) { if (window.applicationCache.status == window.applicationCache.UPDATEREADY) { // Browser downloaded a new app cache. // Swap it in and reload the page to get the new hotness. window.applicationCache.swapCache(); if (confirm('A new version of this site is available. Load it?')) { window.location.reload(); } } else { // Manifest didn't changed. Nothing new to server. } }, false); }, false); 

为了避免一些混淆,我将添加GitHub为cache.manifest文件设置正确的HTTP标头:

 Content-Type: text/cache-manifest Cache-Control: max-age=0 Expires: [CURRENT TIME] 

所以你的浏览器知道这是一个caching清单,应该总是检查新版本。