3周前 (05-04)  工作笔记 |   抢沙发  0 
文章评分 0 次,平均分 0.0

最近客服来报,一批用户访问公司网站的时候,由于其网络环境有代理服务器,导致A用户看到B用户的信息,这是非常尴尬的事情。解决的方法也很容易,给网址加上时间戳就可以了,用JS就能实现。

JS代码如下

// 时间戳
function timestamp() {
    return 't='+new Date().getTime()+''+Math.floor(Math.random()*9999+1000);
}
//在URL上设置时间戳
function setUrlStamp(url)
{
    url = url.replace(/(^\s*)|(\s*$)/g,'');
    if(url.indexOf("t=") == -1)
    {
        if(url.indexOf("?") != -1)
        {
            url = url+"&"+timestamp();
        }else
        {
            url = url+"?"+timestamp();
        }
    }
    return url;
}
//在某片区域上给所有a标签设置时间戳
function setHrefStamp(area)
{
    var target = $(area+" [href]");
    if(target.length==0) return;
    target.each(function(index){
        $(this).attr('href',setUrlStamp($(this).attr('href')));
    });
}

调用方法:

$(function() {
    setHrefStamp("#test");
});

好多Linux + Apache的服务器都会对CSS、JS和图片这些静态的内容设置缓存,到了IE这里又会在本地做一个缓存。所以当我们更新了CSS文件之后,常常会出现客户端没有更新,导致显示出现问题。之前我一直使用时间戳参数的方法来解决:

<link rel="stylesheet" type="text/css"   href="common.css?time=20060408" />

每次更改了css文件就把参数time的值设为更改当日的日期,这样本地IE就会把它当作一个新的文件更新一次。

但是在最近做的项目中发现一个比较奇怪的问题,服务器端做了gzip压缩,到客户端第一次解压的时候没问题,第二次访问的时候ie从cache里读文件就出问题了,只能读出前面大约一两千个字节。在两台win2000+ie6的机子上重现了这个问题,XP的还没有发现。

最终的解决方案是在时间戳参数后面再加上一个.css结尾,也就是这么写:

<link rel="stylesheet" type="text/css"   href="common.css?time=20060408.css" />

然后就一切正常了...

大概IE在从缓存里读文件的时候还得对文件扩展名做一个判断,所以这么加一下它就认了。我自己对这个解释不甚满意,所以如果你有标准答案麻烦留个言

当然js也可以用这种方法

<link rel="stylesheet" type="text/css"   href="common.css?time=20060408.css" />

Timestamp
//解决浏览器缓存
function timestamp(url){
     //  var getTimestamp=Math.random();
       var getTimestamp=new Date().getTime();
      if(url.indexOf("?")&gt;-1){
        url=url+"&amp;timestamp="+getTimestamp
      }else{
        url=url+"?timestamp="+getTimestamp
      }
      return url;
    }

 

除特别注明外,本站所有文章均为小A博客原创,转载请注明出处来自http://loann.org/1981.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享