emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評(píng)論 :: 2 Trackbacks
          開放ajax應(yīng)用的時(shí)候?yàn)榱吮苊鉃g覽器緩存,我常建議在用XHR發(fā)起請(qǐng)求的時(shí)候加一個(gè)
          xmlhttp.setRequestHeader("If-Modified-Since","0");

          有的時(shí)候我們懷疑瀏覽器緩存了錯(cuò)誤的腳本,也會(huì)這樣用xhr去沖掉IE原有的cache。不過這個(gè)方法在非IE瀏覽器下不管用,似乎是因?yàn)橛捎趆eader有不同,非IE瀏覽器認(rèn)為這些是不同的請(qǐng)求,cache在不同的地方,或者是放棄對(duì)這個(gè)與眾不同的請(qǐng)求的cache了。

          嘗試了一下一些能起類似作用的不同的header,發(fā)現(xiàn)firefox下,似乎cache-control和pragma能起到類似的請(qǐng)求。測(cè)試代碼如下:
          var x=new XMLHttpRequest();
          x.open(
          "GET","http://imgcache.qq.com/ac/qzone/gbk.js?ifmodifiedsince",false)
          x.setRequestHeader(
          "If-Modified-Since","0");
          x.send(
          null);
          var s=document.createElement('SCRIPT');
          document.getElementsByTagName(
          "HEAD")[0].appendChild(s);
          s.src
          ="http://imgcache.qq.com/ac/qzone/gbk.js?ifmodifiedsince";

          var x=new XMLHttpRequest();
          x.open(
          "GET","http://imgcache.qq.com/ac/qzone/gbk.js?cachecontrol",false)
          x.setRequestHeader(
          "Cache-Control","no-cache");
          x.send(
          null);
          var s=document.createElement('SCRIPT');
          document.getElementsByTagName(
          "HEAD")[0].appendChild(s);
          s.src
          ="http://imgcache.qq.com/ac/qzone/gbk.js?cachecontrol";
          var x=new XMLHttpRequest();
          x.open(
          "GET","http://imgcache.qq.com/ac/qzone/gbk.js?Pragma",false)
          x.setRequestHeader(
          "Pragma","no-cache");
          x.send(
          null);
          var s=document.createElement('SCRIPT');
          document.getElementsByTagName(
          "HEAD")[0].appendChild(s);
          s.src
          ="http://imgcache.qq.com/ac/qzone/gbk.js?Pragma";

          FireFox下,用if-modified-since下載成功腳本后,引用腳本時(shí)仍然下載了一份完整的腳本,說明xhr的這個(gè)請(qǐng)求沒有被cache住。用cache-control和pragma的時(shí)候,應(yīng)用腳本時(shí)就不再下載腳本而從cache里面讀了。



          但是這兩個(gè)header不能讓瀏覽器拋棄已有的cache,只能讓瀏覽器重新驗(yàn)證一下版本是否最新的。對(duì)于腳本被截?cái)嗖⑶襝ache的情況,瀏覽器會(huì)驗(yàn)證到版本是最新的而不會(huì)更新那個(gè)“版本正確內(nèi)容錯(cuò)誤”的文件cache。

          對(duì)于其他主流非IE瀏覽器,這兩個(gè)header也沒有用,還是各cache各的,暫時(shí)還不知道如何用xhr來沖掉cache。
          posted on 2010-01-28 15:29 emu 閱讀(392) 評(píng)論(0)  編輯  收藏 所屬分類: DHTML和JAVASCRIPT 技術(shù)
          主站蜘蛛池模板: 酒泉市| 旺苍县| 西乌珠穆沁旗| 松江区| 汕尾市| 北安市| 连平县| 横山县| 滦南县| 清水河县| 商南县| 兰坪| 巴林右旗| 汤原县| 梓潼县| 垫江县| 巴塘县| 南丹县| 罗定市| 池州市| 左云县| 江口县| 泗阳县| 新绛县| 吴忠市| 大竹县| 乌兰浩特市| 高碑店市| 合江县| 郁南县| 台南县| 雷州市| 平谷区| 宝丰县| 山丹县| 西藏| 兰溪市| 新建县| 樟树市| 巩义市| 衡阳县|