解惑

解己之惑,解人之惑

标签:浏览器

Chrome浏览器

Chrome浏览器面世一天市场份额就占到了1%,由此可见google的影响力。我当然也是在第一时间就装上了使用,总体的感觉还是不错的,特别是它的这个名字和我的英文名发音差不多(Cherami),不过依然有一些问题:

  • 自动阻止了重复提交,我玩的网页游戏有买卖资源的功能,而卖资源的时候反应很慢,我一般都是狂点几十下,一下就可以把全部单子下完,但是Chrome自动阻止了这种行为,点击按钮没有得到响应时点击同一个按钮是无效的。
  • 不能显示XML文件,我在做Web Service,用它不能查看我的WSDL文件内容,这个应该起码按照文本显示下吧。
  • 不支持FCKEditor,也就是我的blog的编辑器,所以只能用IE或者FF写博,不知道是哪方面的问题

另外,Chrome可以导出IE的很多内容,最需要注意的是可以导出IE里面保存的表单密码,我想这个应该算IE的一个安全漏洞吧,最起码IE不会提供API去导出密码,所以google在这一点上涉嫌反向工程

浏览器缓存

相信有不少人会遇到浏览器缓存的问题,因为IE默认会缓存访问过的网页,特别是URL的参数是固定的,但是很可能内容会变化。
大部分都知道的可能是在head中增加meta信息:
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
而有文章指出这个依然有问题,如果网页内容超过32K,那么那个设置就实效了,所以要把它放到网页的最后:
            <BODY>
网页内容。。。
</BODY>
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
</HTML>

现在AJAX很流行,而AJAX返回的内容很可能不再是一个完整的网页,那么就不能使用上述的方法,有另外的文章说到可以使用服务器端的HTTP头控制,我试验的结果是无效
    response.setHeader("Cache-Control","no-cache");
    response.setHeader("Cache-Control","no-store");
    response.setHeader("Cache-Control","must-revalidate");

最后采取的方法就是在使用AJAX发送请求的时候附加一个时间戳:
var xmlhttp = createrequest();
xmlhttp.open("GET",appendTimestamp(url),true);

  function appendTimestamp(url)
  {
      if (url.indexOf("?")>0)
      {
          return url+"&ajax_time="+new Date().getTime();
      } else
      {
          return url+"?ajax_time="+new Date().getTime();
      }
  }

当然这个方法也只能解决部分问题,如果URL太长也不行。

更新:
对于AJAX的情况,也可以使用
xmlhttp.setRequestHeader("Cache-Control","no-cache");

推荐另外一个日志:再论怎么有效利用浏览器缓存之怎么避免浏览器缓存静态文件

2007年2月28日更新:
使用服务器端控制AJAX页面缓存:
    response.setHeader( "Pragma", "no-cache" );
    response.addHeader( "Cache-Control", "must-revalidate" );
    response.addHeader( "Cache-Control", "no-cache" );
    response.addHeader( "Cache-Control", "no-store" );
    response.setDateHeader("Expires", 0);
单纯的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")无效。

痛苦的浏览器兼容

今天又遇到一个浏览器兼容的问题,IE和FF的时间添加机制不一样,FF是addEventListener,IE是attachEvent,但是这个还不是全部,如果添加多个,这个顺序依然是不一样的,FF按照添加的顺序执行,而IE按照添加的倒序执行!
为了修正这个问题,只能使用变态的setTimeout避免这个,将对前面的结果有依赖的那个函数的调用放到setTimeout里面延迟执行。

© 2024 解惑

本主题由Anders Noren提供向上 ↑