它表明,Apache似乎默认发送最后修改时间作为标题。如你所描述的那样,仅仅通过使用javascript方法就无法获得这个头文件。您可以通过使用AJAX重新下载文件并检查重新下载的图像的最后修改时间(几乎总是与原始图像相同)以非100%可靠或有效的方式来完成此操作。
使用jQuery的一点为AJAX调用...
<img id="my_img" src="images/current.png" />
<!-- include jQuery - better done in the head -->
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script language="javascript">
var i = document.getElementById('my_img');
$.get(i.src,function(data,status,xhr){
// in the callback - after the ajax request completes...
var filetime = xhr.getResponseHeader('Last-Modified');
i.title = 'image created: ' + filetime; // don't care about formating now
})
</script>
此方法将仅在服务器发送正确Last-Modified
头比图像工作,它可能是不同的(虽然通常不会)以前加载,并通过重新下载您想要的时间戳的图像导致额外的流量和请求。
如果可能 - 我认为一个更好的解决方案是让服务器通过一个小数据源公开文件的时间戳,也许发送JSON显示每个文件的最后修改和其他元数据基于文件名作为关键...这样的服务器应该发送这样的事情:
{
"images/current.png":{"last-modified":"2012-08-07","filesize":"1056 kb"},
"images/raisin.png":{"last-modified":"2012-08-04","filesize":"334 kb"},
"images/sultana.png":{"last-modified":"2012-08-02","filesize":"934 kb"}
}
,然后这些容易解析(使用JSON.parse()
)客户端,并确定你需要的所有的filesizes - 更高效,更可靠。
你应该解释如何在服务器(也许Apache)的可发送适当的头,使之成为完整的解决方案 - 那我就投你一票,〜) – 2012-08-08 08:15:06
Ajax HEAD在我看来会更合适 – mplungjan 2012-08-08 08:17:46
@BillyMoon - 老实说,我不知道这个答案,我不是服务器人。我只知道这往往会出现在AJAX响应头文件中。 – Utkanos 2012-08-08 08:22:14